pthread_mutex_lock可以给个使用的例子吗
时间: 2024-01-12 16:03:26 浏览: 70
当一个线程操作共享资源时,为了确保不会有其他线程同时修改该资源,我们可以使用pthread_mutex_lock函数来进行加锁,如下所示:
```
pthread_mutex_t mutex;
int shared_variable = 0;
void* some_thread_function(void* arg) {
// 加锁
pthread_mutex_lock(&mutex);
// 操作共享资源
shared_variable++;
// 解锁
pthread_mutex_unlock(&mutex);
return NULL;
}
int main() {
// 初始化mutex
pthread_mutex_init(&mutex, NULL);
// 创建多个线程来并发修改共享资源
pthread_t threads[10];
for (int i = 0; i < 10; i++) {
pthread_create(&threads[i], NULL, some_thread_function, NULL);
}
// 等待所有线程完成
for (int i = 0; i < 10; i++) {
pthread_join(threads[i], NULL);
}
// 销毁mutex
pthread_mutex_destroy(&mutex);
return 0;
}
```
在上述例子中,我们定义了一个共享变量shared_variable,并创建了多个线程来并发修改该变量。在每个线程调用some_thread_function函数时,我们首先使用pthread_mutex_lock函数来加锁,这样其他线程就无法同时修改该变量。在操作完共享变量后,我们再使用pthread_mutex_unlock函数来解锁。这种方式可以保证在任意时刻只有一个线程在操作共享变量,从而避免了竞态条件的问题。
阅读全文