Linux进程间可重入信号量

Meh*_*Meh 1 c c++ linux semaphore interprocess

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

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

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

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

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

Cha*_*via 6

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

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

  • 查尔斯是对的​​.boost :: interprocess :: named_recursive_mutex只是隐藏了它使用共享内存的事实.请参阅"detail :: managed_open_or_create_impl <shared_memory_object> m_shmem;" (2认同)