好的,在下面的代码中至少有两个主要问题需要纠正。
#define COUNT_LIMIT 12
pthread_mutex_t c_mutex;
pthread_cond_t cond_cv;
int count=0;
void *inc_count(void *param)
{
int i=0;
for (i=0;i<14;i++) {
count++;
if (count==COUNT_LIMIT)
pthread_cond_signal(&cond_cv);
}
}
void *watch_count(void *param)
{
pthread_mutex_lock(&c_mutex);
while (count<COUNT_LIMIT) {
pthread_cond_wait(&cond_cv, &c_mutex);
printf("watch_count(): signal received.\n");
}
pthread_mutex_unlock(&c_mutex);
pthread_exit(NULL);
}
我发现的第一个问题是在while循环的watch_count()函数中,逻辑错误,因为当count为12时,它不会小于COUNT_LIMIT。所以要解决这个问题,我会将其更改为
while(count <= COUNT_LIMIT)
在发信号通知watch_count()之后,另一件事是解锁互斥锁吗?
否则,我找不到任何其他错误的东西。我的活动尝试阅读this,但我无法理解它。
答案 0 :(得分:1)
一个错误是inc_count()
函数在访问count
变量时需要锁定互斥锁。
您对while()
循环的建议更改不正确 - 如果pthread_cond_wait()
不再次呼叫count == COUNT_LIMIT
,那么原始测试是正确的。
另一个错误可能是c_mutex
和cond_cv
未正确初始化。