如果在线程中修改并且使用互斥锁正确锁定和解锁的变量在另一个线程的while循环中读取,那么如何锁定和解锁互斥锁以使while循环可以读取该值,是它甚至是必要的吗?
我在一个线程中设置了一个变量,并使用while循环在另一个线程中检查它。如何锁定和解锁变量以检查while循环条件?
是唯一合理的方法,有一个额外的变量用于运行while循环并将其设置为需要锁定/解锁的变量的值吗?
答案 0 :(得分:8)
编辑:@ ninjalj建议使用条件变量替换while
- 循环是好的建议如果你正在使用{{1} -loop到等待直到达到程序状态。但是,如果您使用while
- 循环执行工作,直到达到程序状态,那么......
您应该在实用程序函数中包装“while
”代码,然后您的lock-mutex; examine variable; unlock mutex
- 循环条件可以调用该函数。例如,可以按以下代码所示编写实用程序函数:
while
然后,您的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;
}
- 循环条件可以写成如下:
while
答案 1 :(得分:4)
您应该使用条件变量。请参阅pthread_cond_wait(3)
和pthread_cond_signal(3)
答案 2 :(得分:0)
如果有其他人同时写作的话,你必须在阅读期间锁定它。否则会发生各种各样的事情,比如你看到部分更新或根本没有更新。
如果您将该值用作循环条件,并且在循环期间不受更新影响,则制作副本并释放锁定可能是一个好主意。如果你受到改变的影响,你必须保持锁定。