Linux进程间可重入信号量

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

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

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

是否有一个类提供了一个可重入的进程间锁(也许在升压)?

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

Solutions Collecting From Web of "Linux进程间可重入信号量"

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

这会给你一个可重入的进程间锁。

你可以尝试建立自己的futexes 。 在这个tarball中看到usersem.c。