我正在研究Linux。在我的代码中,我试图运行一些试图锁定 RECURSIVE 互斥锁的线程(例如 2 个),但只有一个线程可以访问并锁定互斥锁,而第二个线程即使在第一个线程之后也会出现 EBUSY 错误线程已将其解锁。我认为这是因为互斥锁是私有的而不是共享的。
我正在尝试将互斥锁设置为 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。
有任何想法吗?