【发布时间】:2015-11-17 08:19:25
【问题描述】:
好的,所以在下面的代码中至少有两个应该纠正的主要问题。
#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,但我无法理解它。
【问题讨论】:
-
while条件很好。 “当计数为 12 时,它不会小于 COUNT_LIMIT”。这正是我们想要的。它应该一直循环,直到计数达到 12。不需要您的更改。 -
我不认为您的问题带有对期望行为的一些合理描述?
标签: c pthreads mutex condition-variable