1

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

谁能指出我在 C/C++ for Unix 中的相关文档?使用这种结构的示例代码会很棒。

谢谢

4

5 回答 5

3

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

具体来说,请查看:

有关更多解释性材料,请参阅UNIX 环境中的高级编程,第 14.3 节

于 2009-09-11T08:28:00.977 回答
2

看看UNIX 网络编程卷。2 W.理查德史蒂文斯。

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

于 2009-09-11T08:26:52.773 回答
2

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

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

于 2009-09-11T09:04:38.040 回答
1

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

于 2009-09-11T08:25:56.530 回答
1

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

flock(fd, LOCK_EX);
n = write(fd, buf, count);
flock(fd, LOCK_UN);
于 2009-09-11T08:27:49.810 回答