我正在将Windows应用程序移植到Linux,我遇到了同步问题。
在Windows中我使用系统级别的mutex来同步对共享内存块的访问。
如何在Linux中模拟它?我使用semget创建了一个SystemV信号量。问题是它不是可重入的,如果我已经持有它会阻塞,不像在Windows上。我可以为它添加一个引用计数,但是我需要同步访问它,这意味着另一个(这次只适用于当前进程)互斥锁。
是否有某个类提供了可重入的进程间锁(可能在Boost中)?
BTW,使用文件锁是不可接受的,因为它可能太慢(我需要在两个进程之间进行超低延迟通信)。答案 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。