C Mutex锁定多个进程访问的共享内存

时间:2016-03-14 20:02:42

标签: c synchronization mutex shared-memory multiple-processes

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

2 个答案:

答案 0 :(得分:0)

抱歉,但你运气不好。 Pthreads库没有“命名”互斥锁的概念,因此两个独立的进程无法可靠地共享一个。

是的,您可以在共享内存中创建互斥锁,而不是使用其他进程中的互斥锁,但是当您在第二个进程中检查互斥锁时,无法确保第一个进程完全初始化互斥锁。对于完全独立的程序,我强烈建议使用信号量。

答案 1 :(得分:0)

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

来自pthread_mutexattr_init POSIX manuals at linux.die.net的信号量示例在我的Linux 4.2.0-27 Ubuntu上运行。