gpt4 book ai didi

c - POSIX 共享 - 递归互斥体

转载 作者:行者123 更新时间:2023-11-30 15:56:30 26 4
gpt4 key购买 nike

我正在Linux上工作。在我的代码中,我尝试运行几个线程(例如 2 个)来尝试锁定 RECURSIVE 互斥锁,但只有一个线程可以访问并锁定互斥锁,而第二个线程即使在第一个线程之后也会收到 EBUSY 错误线程已将其解锁。我认为这是因为互斥锁是私有(private)的而不是共享的。

我正在尝试将互斥体设置为 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。

有什么想法吗?

最佳答案

如果同一进程中确实有两个线程,则 pshared 属性不应产生影响。

EBUSY 只允许作为 pthread_mutex_trylock 的返回,所以我想你使用了这个。

我得到的唯一解释是,您可能在第一个线程中多次锁定互斥体。 lockunlock 始终成对出现,请确保您拥有的 unlock 数量与 lock 数量一样多.

关于c - POSIX 共享 - 递归互斥体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11243382/

26 4 0