gpt4 book ai didi

c - 使用互斥锁保护全局变量

转载 作者:行者123 更新时间:2023-11-30 16:24:38 27 4
gpt4 key购买 nike

假设线程函数由nbThreads个线程同时执行,需要保护foo变量,将其设置为0吗?更一般地说,如果我们将全局共享变量设置为 0,是否有必要保护它?

#include <pthread.h>
int foo = 0;
int nbThreads = 10;
pthread_mutex_t mut;

void thread(void *arg) {
if (foo == nbThreads - 1) {
foo = 0;
} else {
pthread_mutex_lock(&mut);
foo++;
pthread_mutex_unlock(&mut);
}
pthread_exit(NULL);
}

最佳答案

是的,将互斥体设置为零时和更改互斥体时一样需要使用互斥体。将其设置为零仍然可能与 foo++ 产生竞争条件,并导致 foo 具有错误的值。是的,任何由多个线程访问的变量都需要使用这种锁定机制。在某些情况下,您可以使用原子变量来为您处理简单增量/赋值的锁定,但我从未使用过它们。

关于c - 使用互斥锁保护全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53597588/

27 4 0