6、编写一个程序,使用pthread_mutex来保护共享变量,避免竞态条件。
时间: 2024-09-09 18:12:22 浏览: 68
在C语言中,`pthread_mutex`是POSIX线程库提供的互斥锁机制,用于同步多个线程对共享资源的访问,防止竞态条件的发生。以下是一个简单的示例程序,展示了如何使用`pthread_mutex_t`来保护共享变量:
```c
#include <stdio.h>
#include <pthread.h>
// 共享变量
int shared_var = 0;
// 锁定互斥锁的函数
void lock_shared() {
pthread_mutex_lock(&mutex);
}
// 解锁互斥锁的函数
void unlock_shared() {
pthread_mutex_unlock(&mutex);
}
// 示例线程函数,增加共享变量的值
void* increment(void* arg) {
for(int i = 0; i < 10; ++i) {
lock_shared();
shared_var++;
printf("Thread %d incremented shared_var to %d\n", pthread_self(), shared_var);
unlock_shared();
}
return NULL;
}
int main() {
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; // 初始化互斥锁
// 创建两个线程
pthread_t thread1, thread2;
if(pthread_create(&thread1, NULL, increment, NULL) != 0) {
perror("Creating thread 1 failed");
exit(1);
}
if(pthread_create(&thread2, NULL, increment, NULL) != 0) {
perror("Creating thread 2 failed");
exit(1);
}
// 等待两个线程结束
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
printf("Shared variable after both threads finished: %d\n", shared_var);
return 0;
}
```
在这个例子中,我们首先初始化了一个互斥锁,并在每个线程开始修改`shared_var`之前获取锁。当所有线程完成操作后,释放锁。这样就保证了任何时候只有一个线程能够修改共享变量,从而避免了竞态条件。
阅读全文