2009-09-11 110 views
1

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

任何人都可以指向我的文档在这个在C/C++的Unix?使用这种结构的示例代码会很好。

谢谢

+0

@rsinha为什么你不能过程之间使用信号灯? AFAIK进程只需要知道信号量标识符就可以处理它 – 2009-11-16 21:06:20

回答

1

这听起来像你会关闭使用flock(2)更好:

flock(fd, LOCK_EX); 
n = write(fd, buf, count); 
flock(fd, LOCK_UN); 
1

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

2

你可以使用PTHREAD互斥。在初始化一个互斥量的时候,你需要使用pthread_mutexattr_setpshared函数来让互斥量在进程间共享,然后把它放在一个共享内存中。所有进程都可以连接到共享内存,然后访问互斥锁。

此外,你可以根据你的需要锁定的SHM添加附加属性(递归等,)