Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 由多个进程访问的共享内存上的互斥锁_C_Synchronization_Mutex_Shared Memory_Multiple Processes - Fatal编程技术网

C 由多个进程访问的共享内存上的互斥锁

C 由多个进程访问的共享内存上的互斥锁,c,synchronization,mutex,shared-memory,multiple-processes,C,Synchronization,Mutex,Shared Memory,Multiple Processes,我有两个进程将运行,一个从共享内存(mmap)读取,另一个将写入共享内存(mmap)。这些进程在两个不同的终端中分别启动,但它们需要同步,以便在一个进程写入时,它在另一个进程从内存读取之前写入全部数据。我看到的所有关于共享内存互斥锁的帖子都是从一个主程序生成线程/进程。有没有办法创建一个共享互斥锁,供两个单独的程序使用?对不起,你运气不好。Pthreads库没有“命名”互斥体的概念,因此两个独立进程不能可靠地共享一个进程 是的,您可以在共享内存中创建一个互斥体,然后从另一个进程使用该互斥体,但在

我有两个进程将运行,一个从共享内存(mmap)读取,另一个将写入共享内存(mmap)。这些进程在两个不同的终端中分别启动,但它们需要同步,以便在一个进程写入时,它在另一个进程从内存读取之前写入全部数据。我看到的所有关于共享内存互斥锁的帖子都是从一个主程序生成线程/进程。有没有办法创建一个共享互斥锁,供两个单独的程序使用?

对不起,你运气不好。Pthreads库没有“命名”互斥体的概念,因此两个独立进程不能可靠地共享一个进程


是的,您可以在共享内存中创建一个互斥体,然后从另一个进程使用该互斥体,但在第二个进程中检查互斥体时,无法确保第一个进程完全初始化互斥体。对于真正独立的程序,我强烈建议使用信号量。

您可以在
mmap
ped文件中创建共享互斥。如果您使用的是Linux,并且有一个足够新的内核,您甚至可以创建一个未链接的临时文件,
mmap
it;初始化互斥体,然后再初始化。或者,您可以使用文件锁定来拒绝对它的访问,直到初始化完成


来自我的Linux 4.2.0-27 Ubuntu的信号量示例在我的Linux 4.2.0-27 Ubuntu上运行正常。

另请参阅。可能需要提高您的搜索技能。在stackoverflow内外有许多答案。例如:@kaylum,因为它并不能真正解决OP的问题-第一个进程需要在共享内存中创建一个互斥体,然后第二个进程才能读取它,并且没有办法确保创建互斥体。@SergeyA好的,很公平。我对这个问题有不同的解释,但你可能有一个观点。