我对 pthread_cond_wait 和 pthread_cond_signal 函数有疑问。阅读手册页后我也无法理解。
请考虑以下代码。
void* thread_handler(){
... // counts till COUNT_LIMIT is reached
if (count == COUNT_LIMIT) {
pthread_cond_signal(&count_threshold_cv);
printf("inc_count(): thread %ld, count = %d Threshold reached.\n",
my_id, count);
}
printf("inc_count(): thread %ld, count = %d, unlocking mutex\n",
my_id, count);
...
}
void* thread_handler1(){
... // waits till the previous thread has finished counting
pthread_mutex_lock(&count_mutex);
while (count<COUNT_LIMIT) {
pthread_cond_wait(&count_threshold_cv, &count_mutex);
printf("watch_count(): thread %ld Condition signal received.\n", my_id);
}
pthread_mutex_unlock(&count_mutex);
pthread_exit(NULL);
}
该代码按预期工作。我正在尝试理解代码。这是程序的工作原理
输入 thread_handler1 并执行 cond_wait。从手册页我了解到 cond_wait 将立即以原子方式释放锁。那么为什么他们在thread_handler1下面再次释放锁
在第一个线程满足条件并达到条件信号后,我期望阻塞的线程执行其步骤。相反,我在执行 cond_signal 的线程下面得到了 printfs。为什么会这样
总的来说,为什么我们需要在等待和发出信号之前锁定。没有锁就不能做到这一点。
有关该程序的简要介绍,请参阅此处的完整程序。您可以在“使用条件变量”部分找到它
提前致谢
奇丹巴拉姆