这段代码正确且可移植吗?
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);
}
}
在实际的应用程序中,我有三个线程 - 两个用于向数组添加值,一个用于读取它们。我需要第三个线程在其他线程之一添加新项目后立即显示数组的内容。
它不是。如果线程 A 在线程 B 到达 mutex_lock(2) 之前到达 mutex_unlock(2),则您将面临未定义的行为。您也不能解锁另一个线程的互斥锁。
The pthread_mutex_lock 开放组基本规范 http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_mutex_lock.html这么说:
如果互斥体类型为 PTHREAD_MUTEX_NORMAL [...] 如果线程尝试解锁尚未锁定的互斥体或已解锁的互斥体,则会导致未定义的行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)