线程锁调用 c语言举个例子
时间: 2025-01-30 14:54:04 浏览: 16
C语言中线程锁调用示例
下面展示了一个简单的例子来说明如何在线程间使用 pthread_mutex
来保护共享资源。此代码创建两个工作线程,它们尝试访问并修改全局变量 counter
。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
// 定义互斥锁对象
pthread_mutex_t counterMutex;
int counter = 0;
void* increment_counter(void *arg) {
int i;
for (i = 0; i < 1000; ++i) {
// 尝试获得锁
pthread_mutex_lock(&counterMutex); // 锁定操作[^2]
// 修改临界区内的数据
counter++;
// 解除锁定以便其他线程可以继续运行
pthread_mutex_unlock(&counterMutex); // 解锁操作
}
return NULL;
}
int main() {
pthread_t thread1, thread2;
// 初始化互斥锁
if (pthread_mutex_init(&counterMutex, NULL) != 0) { // 创建互斥锁[^3]
printf("Failed to initialize mutex\n");
exit(EXIT_FAILURE);
}
// 创建新线程
if (pthread_create(&thread1, NULL, &increment_counter, NULL)) {
fprintf(stderr, "Error creating thread 1\n");
exit(EXIT_FAILURE);
}
if (pthread_create(&thread2, NULL, &increment_counter, NULL)) {
fprintf(stderr, "Error creating thread 2\n");
exit(EXIT_FAILURE);
}
// 等待所有线程完成
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
// 清理互斥锁资源
pthread_mutex_destroy(&counterMutex); // 销毁互斥锁
// 输出最终计数值
printf("Final value of counter is %d.\n", counter);
return EXIT_SUCCESS;
}
在这个程序里:
- 使用
pthread_mutex_init()
函数初始化互斥锁。 - 当某个线程想要进入临界区时会调用
pthread_mutex_lock()
获取锁;如果此时另一个线程已经持有该锁,则当前线程会被阻塞直到前一个线程释放锁为止。 - 访问完受保护的数据之后应立即通过
pthread_mutex_unlock()
方法解除锁定状态。 - 结束整个应用程序之前记得销毁不再使用的互斥锁实例以回收内存空间。
相关推荐


















