2016-03-14 87 views
0

我有两个进程将运行,一个将从共享内存(mmap)读取,另一个将写入该共享内存(mmap)。这些进程分别在两个不同的终端中启动,但它们需要同步,以便在一个进程正在写入时,它会在另一个进程从内存中读取之前写入全​​部数量。我所看到的与共享内存互斥锁有关的所有帖子都从一个主程序中产生线程/进程。有什么办法可以创建一个共享的互斥锁,可以被两个独立的程序使用吗?C多进程访问共享内存互斥锁

+0

参见http://stackoverflow.com/q/2389353。 –

+0

可能需要提高你的搜索技能。在stackoverflow之内和之外有很多答案。例如:[是否可以在Linux/UNIX上的多处理情况下使用互斥锁?](http://stackoverflow.com/questions/9389730/is-it-possible-to-use-mutex-in-multiprocessing-case- on-linux-unix) – kaylum

+0

@kaylum,因为它并不能真正解决OP的问题 - 第一个进程需要在第二个进程读取它之前在共享内存中创建互斥锁,并且无法确保创建互斥锁。 – SergeyA

回答

0

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

是的,您可以在共享内存中创建互斥锁,并且可以在其他进程中使用此互斥锁,但是您无法确保互斥体在第二个进程中通过第一个进程完全初始化。对于trully独立程序,我强烈建议使用信号量。

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上确实有效。