我是线程和流程的新手。
我的代码现在正常工作,将代码分配到多个进程中。但是每个进程都需要添加到一个全局变量,但是从我读到的内容来看,每次进程分叉时,它都会获取全局变量,并单独添加它们。有没有办法加入他们,就像你可以用线程一样?
答案 0 :(得分:2)
不同的进程可以通过共享内存进行通信和交换数据。 在linux上,你可以看看:
man shm_overview
用于在多个进程上附加内存段
和
man sem_overview 用于控制并行访问的信号量库。
答案 1 :(得分:0)
您应该定义一个包含两个字段的结构,一个用于全局,另一个用于信号量。然后,在任何分叉发生之前,在父进程中创建一些足够大的共享内存来保存此结构并在那里初始化一个结构。在子项中,映射共享内存以便它们可以访问全局。所有进程(父进程和子进程)在访问全局时都应遵守信号量规则。
为了避免不必要的阻塞,这会影响性能,尽量不要让信号量持续太久。阅读全局时,在一个过程中快速复制它并使用它,而不是在使用其值的整个时间内保持信号量。同样,在更改全局时,请提前准备好您的更改(在获取信号量之前),一旦获得信号量,请立即将它们全部复制。有时候,你的工作取决于阅读和编写全局,而不会在读写之间发生变化。在这种情况下,一些阻塞可能是不可避免的。
目前尚不清楚您所使用的平台,但所有主要的PC和服务器平台(Windows,Linux / Unix / Mac OS)都支持共享内存和信号量。 API可能不同,但您需要的功能就在那里。