我正在研究linux。 在我的代码中,我试图运行一些尝试锁定RECURSIVE互斥锁的线程(例如2),但只有一个线程可以访问并锁定互斥锁,而第二个线程甚至在第一个之后获得EBUSY错误线程解锁了它。我认为这是因为互斥锁是PRIVET而不是SHARED。
我正在尝试将互斥锁设置为RECRUSIVE和SHARED,如下所示:
void
MutexCreate(pthread_mutex_t* _m)
{
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(_m, &attr);
}
(我确实检查了功能错误 - 所有这些都返回0)
即使我尝试通过以下方式将其设为默认共享互斥锁:
void
MutexCreate(pthread_mutex_t* _m)
{
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
pthread_mutex_init(_m, &attr);
}
它仍然是PRIVET。
有什么想法吗?
答案 0 :(得分:1)
如果在同一进程中确实有两个线程,pshared
属性不应该有影响。
EBUSY
仅允许作为pthread_mutex_trylock
的回复,所以我想你使用了它。
我唯一的解释是你可能会在第一个帖子中多次锁定你的互斥锁。 lock
和unlock
总是成对出现,请确保您拥有unlock
次lock
次。{/ p>