为什么在发信号或广播条件时持有pthread互斥锁是个好主意?

时间:2015-10-29 14:12:43

标签: pthreads mutex

我觉得我不了解互斥和条件。如果我有一个线程在它开始操作之前等待条件,为什么另一个线程在发出条件让线程开始其操作之前锁定互斥锁?我知道如果我们设置一个另一个线程读取的变量,我们会在发出信号之前锁定互斥锁,但如果我们只使用互斥锁和条件告诉另一个线程何时停止“休眠”,我不明白为什么我们需要在发出条件信号之前锁定互斥锁

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t  cond = PTHREAD_COND_INITIALIZER;

void thread1()
{
    pthread_mutex_lock(&mutex);
    for(;;)
    {
        pthread_cond_wait(&cond, &mutex);

        // do stuff

        pthread_mutex_lock(&mutex);
    }
    pthread_mutex_unlock(&mutex);
}

void mainthread()
{
    // start thread1
    for(;;)
    {
        // do stuff

        // lock the mutex (why?)
        pthread_cond_broadcast(&cond);
        // unlock the mutex
    }
}

0 个答案:

没有答案