简述
- 定义互斥锁:使用
pthread_mutex_t
类型定义一个互斥锁变量。
- 初始化互斥锁:在主线程中使用
pthread_mutex_init
函数初始化互斥锁。
- 加锁:在每个线程访问和修改全局变量
count
之前,使用pthread_mutex_lock
函数对互斥锁加锁,这样其他线程在该线程持有锁期间无法访问count
。
- 解锁:在访问和修改完
count
之后,使用pthread_mutex_unlock
函数解锁互斥锁,以便其他线程可以获取锁并访问count
。
- 销毁互斥锁:在主线程结束前,使用
pthread_mutex_destroy
函数销毁互斥锁,释放相关资源。
代码示例
#include <stdio.h>
#include <pthread.h>
// 全局变量
int count = 0;
// 定义互斥锁
pthread_mutex_t mutex;
// 线程函数
void* increment(void* arg) {
// 加锁
pthread_mutex_lock(&mutex);
for (int i = 0; i < 1000000; i++) {
count++;
}
// 解锁
pthread_mutex_unlock(&mutex);
return NULL;
}
int main() {
pthread_t tid1, tid2;
// 初始化互斥锁
pthread_mutex_init(&mutex, NULL);
// 创建线程
if (pthread_create(&tid1, NULL, increment, NULL) != 0) {
return 1;
}
if (pthread_create(&tid2, NULL, increment, NULL) != 0) {
return 2;
}
// 等待线程结束
if (pthread_join(tid1, NULL) != 0) {
return 3;
}
if (pthread_join(tid2, NULL) != 0) {
return 4;
}
// 销毁互斥锁
pthread_mutex_destroy(&mutex);
printf("Final count: %d\n", count);
return 0;
}