c++ 互斥锁用法举例
时间: 2023-05-23 15:06:32 浏览: 100
A:在C语言中,互斥锁常常用于多线程编程中,确保同一时刻只有一个线程能够访问共享资源,避免了资源竞争的发生。下面是互斥锁的使用范例:
```
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int shared_data = 0;
void *increment(void *arg) {
int i;
for (i = 0; i < 1000000; i++) {
pthread_mutex_lock(&mutex); // 加锁
shared_data++;
pthread_mutex_unlock(&mutex); // 解锁
}
return NULL;
}
int main() {
pthread_t threads[2];
int i;
// 创建两个线程
for (i = 0; i < 2; i++) {
pthread_create(&threads[i], NULL, increment, NULL);
}
// 等待两个线程结束
for (i = 0; i < 2; i++) {
pthread_join(threads[i], NULL);
}
printf("shared_data = %d\n", shared_data);
return 0;
}
```
在上面的代码中,我们定义了一个全局变量 `shared_data` ,并使用两个线程并行地对它进行累加操作。由于这个变量是共享的,所以我们需要使用互斥锁 `mutex` 来实现对它的加锁和解锁操作。每当一个线程要对 `shared_data` 进行修改时,它首先会使用 `pthread_mutex_lock` 函数获取互斥锁 `mutex` ,这会将当前线程阻塞,直到锁被另一个线程释放。当这个线程成功获得锁后,它就可以修改 `shared_data` 的值了。待修改完成后,它使用 `pthread_mutex_unlock` 函数释放互斥锁,这会让其他线程获得锁并继续执行。最终,我们把 `shared_data` 的值打印出来,看看它是否正确地累加了两个线程各自的计算结果。
阅读全文