对不起我的英语 - 我是俄罗斯人.
这段代码是否正确且便携?
void* aThread(void*)
{
while(conditionA)
{
pthread_mutex_lock(mutex1);
//do something
pthread_mutex_unlock(mutex2);
}
}
void* bThread(void*)
{
while(conditionB)
{
pthread_mutex_lock(mutex2);
//do something
pthread_mutex_unlock(mutex1);
}
}
Run Code Online (Sandbox Code Playgroud)
实际上在目标应用程序中,我有三个线程 - 两个用于编写数组,一个用于读取.并且我需要在其中一个线程改变数组第三个线程后显示数组的内容.
use*_*374 13
它不是.如果线程A在线程B到达mutex_lock(2)之前到达mutex_unlock(2),那么您将面临未定义的行为.你也不能解锁另一个线程的互斥锁.
该调用pthread_mutex_lock公开组基本规范是这么说的:
如果互斥锁类型为PTHREAD_MUTEX_NORMAL [...]如果某个线程尝试解锁未锁定的互斥锁或解锁的互斥锁,则会导致未定义的行为.
正如user562734的回答所说,答案是否定的 - 您无法解锁被另一个线程锁定的线程.
为了达到你想要读/写器同步,你应该使用条件变量- pthread_cond_wait(),pthread_cond_signal()以及相关的功能.