在while循环检查中处理互斥变量

jar*_*ryd 6 c mutex pthreads

如果在线程中修改并使用互斥锁正确锁定和解锁的变量在另一个线程的while循环中读取,那么如何锁定和解锁互斥锁以使while循环可以读取该值,是否甚至是必要的?

我在一个线程中设置一个变量,并使用while循环在另一个线程中检查它.如何锁定和解锁变量以检查while循环条件?

是唯一合理的方法,有一个额外的变量用于运行while循环并将其设置为需要锁定/解锁的变量的值?

Cia*_*ale 8

编辑:@ninjalj建议while使用条件变量替换-loop是一个很好的建议,如果你使用while-loop 等到达到程序状态.但是,如果您使用while-loop进行工作直到达到程序状态,那么......

您应该将" lock-mutex; examine variable; unlock mutex"代码包装在实用程序函数中,然后您的while-loop条件可以调用该函数.例如,可以按以下代码所示编写实用程序函数:

int valueOfSharedVariable()
{
    int status;
    int result;

    status = pthread_mutex_lock(&mutex);
    assert(status == 0);
    result = sharedVariable;
    status = pthread_mutex_unlock(&mutex);
    assert(status == 0);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

然后,您的while-loop条件可以写成如下:

while (valueOfSharedVariable() < 10) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 大多数pthread函数如果成功则返回0,如果失败则返回某种错误代码.如果出现问题并且您未能正确获取或释放互斥锁,则断言存在. (3认同)

nin*_*alj 5

您可能应该使用条件变量。查看pthread_cond_wait(3)pthread_cond_signal(3)