【发布时间】:2012-06-29 21:34:16
【问题描述】:
我正在使用 Linux。 在我的代码中,我试图运行几个线程(例如 2 个)试图锁定 RECURSIVE 互斥锁,但只有一个线程可以访问和锁定互斥锁,而第二个线程即使在第一个线程之后也会出现 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。
有什么想法吗?
【问题讨论】:
-
您必须告诉我们您正在使用的平台。对这些东西的支持在很大程度上是特定于平台的。
-
正如我编辑的那样 - 我正在使用 linux