互斥锁中的条件变量错误

时间:2015-08-24 01:31:34

标签: c pthreads mutex condition-variable

好的,在下面的代码中至少有两个主要问题需要纠正。

#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时,它不会小于COU​​NT_LIMIT。所以要解决这个问题,我会将其更改为

while(count <= COUNT_LIMIT)

在发信号通知watch_count()之后,另一件事是解锁互斥锁吗?

否则,我找不到任何其他错误的东西。我的活动尝试阅读this,但我无法理解它。

1 个答案:

答案 0 :(得分:1)

一个错误是inc_count()函数在访问count变量时需要锁定互斥锁。

您对while()循环的建议更改不正确 - 如果pthread_cond_wait() 再次呼叫count == COUNT_LIMIT,那么原始测试是正确的。

另一个错误可能是c_mutexcond_cv未正确初始化。