共享内存信号量

时间:2009-09-11 08:02:26

标签: c++ c unix concurrency shared-memory

我有10个进程正在运行,每个进程都写入同一个文件。我不想要多个编写器,所以基本上我正在寻找一个互斥/二进制信号量来保护文件写入。问题是我不能在10个进程之间共享信号量,所以我正在寻找在10个进程之间使用共享内存,并将信号量放在共享内存中,以便每个进程都可以访问它。

有人能指出我在C / C ++ for Unix中的文档吗?使用此结构的示例代码非常棒。

由于

5 个答案:

答案 0 :(得分:3)

将信号量放在共享内存中并不是解决此问题的最佳解决方案(如果它甚至可以工作)。您应该研究文件锁定,这是一个专门设计用于在文件编写者之间提供排他性的UNIX功能。

具体来说,请查看:

有关更多说明材料,请参阅Advanced Programming in the UNIX Environment, section 14.3

答案 1 :(得分:2)

请看看W. Richard Stevens的UNIX Network Programming Vol. 2

这是一本关于这个主题的最好的书。

答案 2 :(得分:2)

您可以使用PTHREAD互斥锁。在初始化互斥锁时,您需要使用pthread_mutexattr_setpshared函数使互斥进程在进程间共享,然后将其放入共享内存中。所有进程都可以附加到共享内存,然后访问互斥锁。

您还可以根据锁定要求(递归等)向SHM添加其他属性

答案 3 :(得分:1)

如何使用UNIX IPC创建共享队列。一个进程读取队列并写入文件,所有其他进程将数据推入队列。

答案 4 :(得分:1)

听起来你最好不要使用flock(2)

flock(fd, LOCK_EX);
n = write(fd, buf, count);
flock(fd, LOCK_UN);
相关问题