【发布时间】:2013-05-07 12:49:44
【问题描述】:
一般来说,pthread_cond_wait() 和 pthread_cond_signal() 的调用方式如下:
//thread 1:
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond, &mutex);
do_something()
pthread_mutex_unlock(&mutex);
//thread 2:
pthread_mutex_lock(&mutex);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
步骤是
pthread_cond_wait(&cond, &mutex);被调用,它解锁了互斥锁线程 2 锁定互斥体并调用
pthread_cond_signal(),从而解锁互斥体在线程 1 中,
pthread_cond_wait()被调用并再次锁定互斥锁
现在在线程 2 中,在调用 pthread_cond_signal() 之后,pthread_mutex_unlock(&mutex) 将运行,在我看来它想要解锁一个现在被线程 1 锁定的互斥锁。我的理解有什么问题吗?
此外,在我看来,pthread_cond_wait() 对于同一个 cond-mutex 对只能由 1 个线程调用。但是有一种说法“pthread_cond_signal() 函数应至少解除阻塞在指定条件变量 cond 上阻塞的线程之一(如果有任何线程在 cond 上阻塞)。”那么,这是否意味着pthread_cond_wait() 可以被多个线程调用以获取相同的 cond-mutex 对?
【问题讨论】:
标签: c++ multithreading mutex