如何通过Linux上的静态库同步进程?

我有一个家庭作业项目,需要创建一个STATIC库来提供对几个命名管道的相互访问。

这些管道用于使用库和服务器的各种客户端之间的通信。

现在,假设我想使用pthread互斥量; 我怎么能实现这一目标? 进程如何知道哪个是存储互斥锁的共享内存区域? 谁应该要求这个记忆区? 服务器不能,因为它需要库本身提供互斥。

感谢asveikau我想出了这个:

#define SHARED 1 #define MUTEX 1 int main() { sem_t* mutex = sem_open("mutex", O_CREAT); sem_init(mutex, SHARED, MUTEX); fork(), fork(), fork(); sem_wait(mutex); int i; for(i = 0; i < 10; i++) printf("process %d %d\n", getpid(), i), fflush(stdout); sem_post(mutex); } 

从输出真的似乎解决了我的问题。

谢谢大家。

我把它作为评论,但我认为值得回答。

正如其他人所说,pthread互斥体不是跨进程的。 你需要的是一个“命名的互斥体”。 您可以使用sem_open创建一个跨进程信号量,并为其初始计数为1.在这种情况下, sem_wait变为“互斥锁”, sem_post变为“互斥锁解锁”。

请注意, sem_open虽然是POSIX的一部分,但并未得到普遍支持。 我相信它可以在Linux和Mac OS X上运行。如果你关心它,可能是Solaris(现在你可能不关心)。 我知道在OpenBSD上它始终与ENOSYS失败。 因人而异。