Linux进程间可重入信号量

时间:2009-11-17 13:34:05

标签: c++ c linux semaphore interprocess

我正在将Windows应用程序移植到Linux,我遇到了同步问题。

在Windows中我使用系统级别的mutex来同步对共享内存块的访问。

如何在Linux中模拟它?我使用semget创建了一个SystemV信号量。问题是它不是可重入的,如果我已经持有它会阻塞,不像在Windows上。我可以为它添加一个引用计数,但是我需要同步访问它,这意味着另一个(这次只适用于当前进程)互斥锁。

是否有某个类提供了可重入的进程间锁(可能在Boost中)?

BTW,使用文件锁是不可接受的,因为它可能太慢(我需要在两个进程之间进行超低延迟通信)。

2 个答案:

答案 0 :(得分:6)

您可以使用共享(进程间),递归 pthread_mutex_t。创建一个普通的pthread_mutex(存储在共享内存中)并使用带有pthread_mutexattr_settype标志的PTHREAD_MUTEX_RECURSIVE设置其属性,然后使用pthread_mutexattr_setpshared标志调用PTHREAD_MUTEX_SHARED

这将为您提供可重入的进程间锁定。

答案 1 :(得分:1)

您可以尝试使用futexes构建自己的。请参阅this tarball中的usersem.c。