【发布时间】:2015-06-01 22:54:49
【问题描述】:
代码:
void *inc_func(void *arg)
{
pthread_mutex_lock(&mutex);
pthread_cond_signal(&count_threshold_cv);
sleep(1);
pthread_mutex_unlock(&mutex);
}
void *watch(void *arg)
{
pthread_mutex_lock(&mutex);
pthread_cond_wait(&count_threshold_cv,&mutex);
sleep(1);
pthread_mutex_unlock(&mutex);
}
int main()
{
pthread_t id[2];
pthread_create(&id[0],NULL,watch,NULL);
pthread_create(&id[1],NULL,inc_func,NULL);
int i;
for(i=0;i<2;i++)
pthread_join(id[i],NULL);
}
现在我们有一个mutex_unlock 函数要在每个线程中执行。和一个锁定的互斥锁。为什么这不会导致undefined behaviour。由于两个线程都尝试解锁同一个互斥锁,这导致一个线程尝试解锁已经解锁的互斥锁。
编辑:pthread_cond_wait 释放 mutex 以供第二个线程使用。现在考虑第二个线程执行pthread_cond_signal,这导致第一个线程重新获取mutex。现在我们有两个线程具有相同的mutex 锁,因为'sleep' 功能两个线程都没有执行mutex_unlock。是不是我的理解错了?
【问题讨论】:
-
这个问题可能重复。已经在stackoverflow.com/questions/1778780/…回复了
-
展示一些示例代码绝对有助于避免误解您。
标签: c pthreads mutex condition-variable