在 Linux 上使用共享内存时出现 FileNotFoundError 错误
我正在尝试为我的python应用程序创建共享内存,该应用程序应在父进程和另一个由该父进程产生的过程中使用.但是,在大多数情况下,有效,有时我会得到以下堆叠: Traceback (most recent call last): File "", line 1, in File "/usr/lib/python3.8/multiprocessing/spawn.py", line 116, in spawn_main exitcode = _main(fd, parent_sentinel) File "/usr/lib/python3.8/multiprocessing/spawn.py", line 126, in _main self = reduction.pickle.load(from_parent) File "/usr/lib/python3.8/multiprocessing/synchronize.
22 2024-04-22
编程技术问答社区
Windows服务器/数据中心:设置CPU亲和力为>64核
setThreadaffinityMask()允许一个人为64个逻辑内核(处理器)设置亲和力掩码.但是,Windows Datacenter最多可以具有64个CPU,每个CPU都有许多核心(请参见在这里). 一个人如何设置> 64个内核的线程? ps.我在C#中进行编码,因此一个.NET答案是理想的,但是C中的API也可以. 解决方案 我使用以下代码来设置处理器组和CPU的亲和力: [StructLayout(LayoutKind.Sequential, Pack = 4)] private struct _GROUP_AFFINITY { public UIntPtr Mask; [MarshalAs(UnmanagedType.U2)] public ushort Group; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3, ArraySubType = Unmanage
2 2024-04-21
编程技术问答社区
在Java和C#中,挥发性语义背后的原因是什么?
C#和Java都定义了 * 挥发性读取已获得语义 * 挥发性写作具有释放语义 我的问题是: 这是定义挥发性的唯一正确方法. 如果没有 挥发性读取具有释放语义 挥发性写作已获得语义 解决方案 volatile语义背后的推理植根于 Java内存模型,该模型是根据 action : 指定的 读取和写入变量 锁和解锁监视器 开始并加入线程 java内存模型定义了假设您有两个动作 a 和 b .为了保证,执行动作B的线程可以看到动作A的结果A,必须存在 A和A之间的关系.如果没有, JVM可以自由重新订购他们喜欢. 一个未正确同步的程序可能具有数据竞赛.发生数据竞赛时,当变量通过> 1个线程读取并由> = 1个线程编写时,但是读取操作并未通过订购之前的订购. . 因此,正确同步的程序没有数据竞赛,并且程序中的所有操作都以固定顺序进行. 因此,操作通常仅是部分有序的,但是也有一个总之间的顺序: 锁定和释放 阅读并写入挥发性变量
10 2024-04-18
编程技术问答社区
有任务的欧拉数
我想使用此公式= ∑((3K)计算多个线程的Euler号码 ^ 2 + 1)/(3K)! ,k = 0,...,∞,但是到目前为止,我还没有得到正确的结果,一个问题是,当我使用相当大的数字时,我将出现在小数点范围内的阶乘功能的范围,这就是我到目前为止完成了 static void Main(string[] args) { Console.WriteLine(Program.Calculate(5, 1)); } public static decimal Calculate(int x, byte taskNumber) { var tasks = new List>(); for (int i = 0; i { int
4 2024-04-17
编程技术问答社区
.NET的多线程与多处理。糟糕的Parallel.ForEach性能
我已经编码了一个非常简单的"单词计数"程序,该程序读取文件并计数文件中每个单词的发生.这是代码的一部分: class Alaki { private static List input = new List(); private static void exec(int threadcount) { ParallelOptions options = new ParallelOptions(); options.MaxDegreeOfParallelism = threadcount; Parallel.ForEach(Partitioner.Create(0, input.Count),options, (range) => { var dic = new Dictionary>();
0 2024-04-13
编程技术问答社区
如何在读取时锁定一个表,使用Entity Framework?
我有一个SQL Server(2012),我使用实体框架(4.1)访问它. 在数据库中,我有一个名为URL的表,独立的过程将为新的URL提供. URL表中的条目可以是状态"新","过程"或"处理". 我需要从不同的计算机访问URL表,检查具有"新"的URL条目,将第一个标记为"过程". var newUrl = dbEntity.URLs.FirstOrDefault(url => url.StatusID == (int) URLStatus.New); if(newUrl != null) { newUrl.StatusID = (int) URLStatus.InProcess; dbEntity.SaveChanges(); } //Process the URL 由于查询和更新不是原子,因此我可以在数据库中读取和更新相同的URL条目. 是否有一种方法可以使选择 - 到期的序列原子以避免这种冲突? 解决方案 我只能通过手动向表发出锁定
4 2024-04-10
编程技术问答社区
半吊子和共享内存
我有一个有关C中多过程编程的问题,我有几个读者流程,这些过程将从文件中读取到共享的缓冲区,而几个作者流程从缓冲区和另一个文件中读取,我们需要哪种类型的信号量为此使用.以及我们如何使用信号量的共享内存. 解决方案 如果您在Linux上,一个简单的选择是使用 pshared Mutexes 和条件变量.需要GLIBC的再生版本.从本质上讲,在您的共享内存段中,您将拥有类似的东西: struct shmem_head { pthread_mutex_t mutex; }; 初始化: void init_shmem_head(struct shmem_head *head) { pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED ); pthread_m
4 2024-04-10
编程技术问答社区
MPI_Comm_split之后,句柄如何分配?
说,我有8个过程.当我执行以下操作时,MPU_COMM_WORLD通信器将分为两个通信器.具有偶数ID的过程将属于一个通信器,并且具有奇数ID的过程将属于另一个通信器. color=myid % 2; MPI_Comm_split(MPI_COMM_WORLD,color,myid,&NEW_COMM); MPI_Comm_rank( NEW_COMM, &new_id); 我的问题是这两个沟通者的手柄在哪里.在拆分之前的处理器ID之后,以前是0 1 2 3 4 5 6 7将变为0 2 4 6 | 1 3 5 7. 现在,我的问题是:假设我想在特定的沟通者中发送和接收,假设一个托管偶数ID的人,那么当我使用错误的通信者从0到2发送消息时,消息可能最终出现在第二个沟通者,这是正确的吗?预先感谢您的澄清! if(new_id
6 2024-04-09
编程技术问答社区
在新终端中执行子进程
我想为UNIX做一个简单的聊天应用程序. 我创建了一个支持多个客户端的服务器.当新客户端连接到服务器时,都会使用fork命令创建新的进程.现在问题是所有子进程在服务器上共享相同的STDIN,原因是为了将消息发送给第二个Clien 1st Child Prosess必须术语.为了解决这个问题,我想在新终端中运行每个子过程. 这可以通过在新文件中编写儿童进程代码的代码来实现,并像xterm -e sh -c一样执行该代码(虽然我没有尝试过). 我真正想要的不是只有两个文件来启动一个新终端并在其中运行其余的代码. int say(int socket) { char *s; fscanf(stdin,"%79s",s); int result=send(socket,s,strlen(s),0); return result; } int main() { int listener_d; struct sockaddr_in nam
6 2024-04-09
编程技术问答社区
PTRACE选项不在父过程中
ptrace选项在父进程中恢复所需的SystemCalls恢复时,请勿设置正确的状态.我只能使用这里看到的内容,没有Peekuser,Sysgood或Syscall.香港专业教育学院阅读Ptrace Man,并在过去的几天里寻找例子,我精神疲惫. 任何想法/技巧,无论多么小,都受到欢迎.谢谢. 参数:/bin/bash -c "echo 'first test' | wc -c" #include #include #include #include int wait_for_syscall(pid_t child) { int status; while (1) { ptrace(PTRACE_CONT, child, 0, 0); waitpid(child, &status, 0); if (WIFS
18 2024-04-09
编程技术问答社区
把工作分给更多的线程需要更多的时间,为什么?
我有一个小的C程序,该程序可以使用到近似 pi 我必须使用大量的样品 n ,其直接比例复杂性为 o(n).因此,试图计算大量样品n,我实现了 posix threads api . 我的代码看起来像这样: pthread_t worker[nthreads]; /* creates workers for each thread */ struct param aparam[nthreads]; /* struct param{ long* hits; long rounds; }; */ long nrounds = nsamples / nthreads; /* divide samples to subsets of equal rounds per thread */ for (int i = 0; i
12 2024-04-08
编程技术问答社区
让子进程等待,直到收到父进程的信号。
我想从父母那里创建n个孩子.我希望所有孩子同时开始(一个功能 - 测量时间).因此,我将功能放在信号处理程序中,当父母完成(叉)所有孩子时,它将信号(使用kill(children_id))发送给所有孩子,以便开始.该代码在下面,但无法正常工作.具体来说,它分叉了所有孩子,但根本不执行函数" mease_time".此功能不是事实,而是记录执行时间并打印出来. 有人可以让我知道我是否做错了什么? int n_task = 4; for (i = 0; i
2 2024-04-08
编程技术问答社区
为什么添加多处理可以防止Python找到我的编译C程序?
我目前正在寻求使用多处理的力量加快代码.但是,在调用Python调用编译代码时,我遇到了一些问题,因为在包含任何形式的多处理时,编译的文件似乎从代码的视图中消失了. 例如,使用以下测试代码: #include int main() { int thread_id; #pragma omp parallel { thread_id = omp_get_thread_num(); } return 0; } 在这里,我编译了程序,然后使用命令 将其转换为.so文件. gcc -fopenmp -o theories/test.so -shared -fPIC -O2 test.c 然后,我尝试从test.py运行上述代码: from ctypes import CDLL import os absolute_path = os.path.dirname(os.path.abspath(__fil
12 2024-04-08
编程技术问答社区
线程和进程ID的取值范围是什么?
fork和pthread_create将返回流程ID或线程ID. ,但我不知道这些ID的值范围. 现在,我想制作一个查找表,在每个条目中都有一个用于线程ID的项目/字段. 每个条目的结构就像: typedef struct { int seq; pthread_t tid; ... } entry_t; 我想在没有线程的情况下将无效的tid分配给条目(很快该字段将填充有效的字段,但是在此之前检查PID是否有效).那么,线程和过程ID的值范围是什么? 解决方案 pthread_t类型完全不透明.您只能将其与pthread_equal函数进行比较,并且没有与任何有效线程ID不同的保留值,尽管该值可能会添加到POSIX标准的下一个版本中.因此,您需要在线程ID并肩上存储第二个字段以跟踪其有效. 其他解决方案 PID的最大值是可变的,默认情况下为32768,这是Short Int的最大值的大小,并且它可以与早期版本的Unix兼容.
18 2024-04-08
编程技术问答社区
如何在C/C++中设置优先级来获取突扰器
我有3个过程(相等的优先级) P1 p2 P3(计时器) 获得静音的优先级如下:P1(1 priority), P2(2 priority), P3(timer)(3 priority) 如果假设p3来获取sutex 然后p2来等静音 之后,P1出现了,它也等待Mutex 如果p3释放互斥x,则p1应该得到sutex而不是p2. 如何在C或C ++中执行此操作. 注意:所有进程都在线程中运行相同的优先级. OS- Windows XP 解决方案 由于线程具有相等的优先级,因此螺纹获得锁定是相当任意的.看来您想等待条件变量,而不是使用简单的静音.您仍然会有一个静音;条件变量是静音之上的概念.另一种可能性是使用同步屏障. 编辑: 使用PTHREADS接口(C风格)使用条件变量的示例: https://computing.llnl.gov/tutorials/pthreads/pthreads/pthreads/pthreads/#c
4 2024-04-08
编程技术问答社区
为什么这段代码的比例不是线性的?
我写了此SOR求解器代码.不要太多打扰这种算法所做的,这并不是关心的.但仅出于完整性的目的:它可以解决方程式线性系统,具体取决于系统的条件. 我使用条件疾病的2097152行Sparce矩阵(从不收敛)运行它,每行最多7个非零列. 翻译:外部do-while循环将执行10000个迭代(值i作为max_iters),中间for将执行2097152迭代,分为work_line的块,分为OpenMP线程之间.最内向的环路将有7次迭代,除非在很少的情况下(少于1%), sol数组的值中的线程之间存在数据依赖关系.中间for的每次迭代都会更新一个元素,但最多读取数组的其他6个元素.由于SOR不是确切的算法,因此在阅读时,它可以在该位置上具有任何先前或当前价值(如果您熟悉求解器,这是一个高斯 - 西埃尔(Gauss-Siedel)平行性). typedef struct{ size_t size; unsigned int *col_buffer;
2 2024-04-07
编程技术问答社区
C/C++ linux fork() and exec()
我使用fork()创建子过程.从子进程中,我使用exec()启动新过程.我的代码如下: ...... pid = fork(); if (pid > 0) { WriteLog("Parent Process"); //Do something } else if (pid == 0) { WriteLog("Child process"); int return = execl(ShellScript); if ( return == -1 ) WriteLog("Launch process fail"); } else { WriteLog("Can't create child process"); } ...... 注意:Writelog函数将是打开文件,写日志和关闭文件. (被冲洗) ShellScript将启动新的过程
2 2024-04-07
编程技术问答社区
父进程如何通过等待从调用_exit的子进程那里获得终止状态?
我已经阅读了以下语句. 给出_exit()给出的状态参数定义了终止状态 该过程可用于此过程的父母 呼叫wait(). 始终由_exit()成功终止一个过程( _exit() 永不返回). 问题 如果_ 退出不返回,则父进程如何获得终止状态 从子过程到等待? 解决方案 每当进程退出(是否通过调用_exit(int exit_status))时,内核将SIGCHLD函数发送给其父.父母可以 1. Ignore the incoming signal 2. Catch it by installing a signal handler 特别是,父母可以通过调用wait()或waitpid()函数来捕获退出状态.在这种情况下,LSB可用于父母.具体来说,状态可以如下学习 int status; wpid = waitpid(child_pid, &status, WUNTRACED); 由于只有最后8位可用,
4 2024-04-07
编程技术问答社区
用TSC(时间戳计数器)计算时间
我正在尝试测量Linux内核模块以非常高的精度来测量Linux内核中某些代码所花费的时间. 为此,我尝试了 rdtscl(),它给出了代码中使用的时钟滴答数: unsigned long ini, end; rdtscl(ini); //some code... rdtscl(end); printk("time taken=%lu ticks",end-ini); 正如我所指的那样>说 tsc是五角星以来所有X86处理器上存在的64位寄存器.因此,如果我有双核处理器,这两个核心是否存在,或者只有一个核心处理器,因为它只是一个处理器,但双核? ? 第二个问题是:我有Intel Xeon I3处理器,该处理器具有4个处理器,每个处理器都有2个内核.然后,测量时钟刻度,将给出单个处理器的刻度或所有4个处理器的添加? 解决方案 如果您没有时钟滴答,那么您的代码会严重出错.您是否编写了自己的rdtscl [或从某个地方的某个地方复制它?] 顺便说一句,现代英
2 2024-04-07
编程技术问答社区