POSIX SHARED - RECURSIVE Mutex

时间:2012-06-28 11:12:12

标签: c posix mutex

我正在研究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。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

EBUSY仅允许作为pthread_mutex_trylock的回复,所以我想你使用了它。

我唯一的解释是你可能会在第一个帖子中多次锁定你的互斥锁。 lockunlock总是成对出现,请确保您拥有unlocklock次。{/ p>