我有10个进程正在运行,每个进程都写入同一个文件。我不想要多个编写器,所以基本上我正在寻找一个互斥/二进制信号量来保护文件写入。问题是我不能在10个进程之间共享信号量,所以我正在寻找在10个进程之间使用共享内存,并将信号量放在共享内存中,以便每个进程都可以访问它。
有人能指出我在C / C ++ for Unix中的文档吗?使用此结构的示例代码非常棒。
由于
答案 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);