1

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

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

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

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

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

4

2 回答 2

6

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

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

于 2009-11-17T13:59:01.990 回答
1

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

于 2009-11-17T13:37:39.903 回答