C语言创建一个互斥锁
时间: 2024-12-03 10:15:10 浏览: 14
C语言并发控制:信号量与互斥锁的实现与应用
在C语言中,互斥锁(Mutex)通常用于保证在同一时间只有一个线程能访问共享资源。C标准库并未提供直接的互斥锁,但你可以使用POSIX线程库(pthread)提供的mutexes来实现这个功能。以下是一个简单的例子,展示了如何创建、获取和释放一个互斥锁:
```c
#include <pthread.h>
#include <stdio.h>
pthread_mutex_t mutex; // 定义全局互斥锁
void* lock_function(void* arg) {
pthread_mutex_lock(&mutex); // 尝试获取锁
printf("Thread %d acquired the lock.\n", pthread_self());
// 独占代码块...
pthread_mutex_unlock(&mutex); // 释放锁
return NULL;
}
int main() {
pthread_t thread_id; // 存储线程ID
if (pthread_create(&thread_id, NULL, lock_function, NULL)) { // 创建线程并传入锁函数
printf("Error creating thread: %s\n", strerror(errno));
return -1;
}
// 另一个线程尝试获取相同的锁
pthread_create(&thread_id, NULL, lock_function, NULL);
// 主线程等待线程结束
pthread_join(thread_id, NULL);
return 0;
}
```
在这个例子中,`pthread_mutex_lock()`函数用于尝试获取锁,如果当前没有其他线程持有锁,那么就成功获取;`pthread_mutex_unlock()`用于释放已持有的锁。
阅读全文