请使用pthread库完成如下功能,2个线程更新一个全局变量count, 每个线程增加 count 的值若干次,采取互斥更新方式,保证总计数正 确
时间: 2024-10-17 12:14:30 浏览: 26
浅析Linux下一个简单的多线程互斥锁的例子
要使用POSIX线程库(pthread)来实现两个线程更新全局变量`count`,保证互斥访问并正确累加计数值,你可以按照以下步骤编写C代码:
首先,你需要包含必要的头文件,并初始化一个互斥锁(mutex)用于保护`count`变量:
```c
#include <pthread.h>
#include <stdio.h>
pthread_mutex_t mutex; // 创建一个互斥锁
int count = 0;
// 初始化函数(仅需调用一次)
void initMutex() {
pthread_mutex_init(&mutex, NULL);
}
```
接下来,定义一个增加`count`的函数,并在其内部获取和释放互斥锁:
```c
void* incrementCounter(void* arg) {
int numTimes = (int)arg;
for (int i = 0; i < numTimes; i++) {
pthread_mutex_lock(&mutex); // 获取锁
count++; // 更新count
printf("Thread %d incremented count to %d\n", pthread_self(), count);
pthread_mutex_unlock(&mutex); // 释放锁
}
return NULL;
}
```
最后,在主函数中创建两个线程,传入各自需要增加的次数,并调用`incrementCounter`:
```c
int main() {
// 确保初始化互斥锁
initMutex();
// 创建线程
pthread_t thread1, thread2;
pthread_create(&thread1, NULL, incrementCounter, (void*)10);
pthread_create(&thread2, NULL, incrementCounter, (void*)20);
// 等待所有线程结束
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
// 输出最终计数结果
printf("Final count: %d\n", count);
// 销毁互斥锁
pthread_mutex_destroy(&mutex);
return 0;
}
```
运行此代码,每个线程会在各自的循环中交替获得锁,安全地增加`count`的值。由于互斥锁的存在,它们不会干扰对方,确保计数的准确性。
阅读全文