共享内存信号量
问题描述:
我有10个进程正在运行,每个进程都写入同一个文件。我不想要多个编写器,所以基本上我正在寻找一个互斥/二进制信号量来保护文件写入。问题是我无法在10个进程中共享信号量,所以我正在寻找10个进程之间使用共享内存的方法,并将信号量放入共享内存中,以便每个进程都可以访问它。共享内存信号量
任何人都可以指向我的文档在这个在C/C++的Unix?使用这种结构的示例代码会很好。
谢谢
答
这听起来像你会关闭使用flock(2)
更好:
flock(fd, LOCK_EX);
n = write(fd, buf, count);
flock(fd, LOCK_UN);
答
如何使用UNIX IPC创建共享队列。一个进程读取队列并写入文件,所有其他进程将数据推入队列。
答
把共享内存,信号量是不是解决这个问题的最佳解决方案(如果它甚至会在所有的工作)。您应该调查文件锁定,这是一种UNIX功能,专门用于在文件编写者之间提供排他性。
具体来说,请上网:
详细说明材料,见Advanced Programming in the UNIX Environment, section 14.3
答
你可以使用PTHREAD互斥。在初始化一个互斥量的时候,你需要使用pthread_mutexattr_setpshared函数来让互斥量在进程间共享,然后把它放在一个共享内存中。所有进程都可以连接到共享内存,然后访问互斥锁。
此外,你可以根据你的需要锁定的SHM添加附加属性(递归等,)
@rsinha为什么你不能过程之间使用信号灯? AFAIK进程只需要知道信号量标识符就可以处理它 – 2009-11-16 21:06:20