#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
// 定义一个全局互斥量
pthread_mutex_t mutex;
// 线程运行的函数
void* thread_function(void* arg) {
// 尝试加锁
pthread_mutex_lock(&mutex);
printf("线程 %ld 已获取互斥量并运行\n", (long)arg);
// 模拟一些耗时操作
sleep(1);
// 释放互斥量
pthread_mutex_unlock(&mutex);
printf("线程 %ld 已释放互斥量\n", (long)arg);
return NULL;
}
int main() {
pthread_t threads[2];
long thread_ids[2] = {1, 2};
// 初始化互斥量
if (pthread_mutex_init(&mutex, NULL) != 0) {
printf("互斥量初始化失败\n");
return 1;
}
// 创建线程
for (int i = 0; i < 2; i++) {
if (pthread_create(&threads[i], NULL, thread_function, (void*)&thread_ids[i]) != 0) {
printf("线程创建失败\n");
return 1;
}
}
// 等待线程结束
for (int i = 0; i < 2; i++) {
pthread_join(threads[i], NULL);
}
// 销毁互斥量
pthread_mutex_destroy(&mutex);
return 0;
}
这段代码展示了互斥量(mutex)在C语言中使用pthread库的一个简单例子。程序中定义了一个全局的互斥量`mutex`,并在`main`函数中初始化它。然后,创建了两个线程,每个线程都尝试获取这个互斥量来执行一段代码(这里用`sleep(1);`来模拟耗时操作)。由于互斥量的互斥性,这两个线程将交替地获取和释放互斥量,从而保证了它们的执行是互斥的,即在同一时间只有一个线程能执行这段代码。最后,在`main`函数的末尾,销毁互斥量以释放资源。