pthread_mutex_lock() 使用示例
时间: 2024-10-19 22:03:22 浏览: 43
`pthread_mutex_lock()`函数是POSIX线程库(pthread)中用于锁定互斥锁(mutex)的一个关键操作,它在多线程环境中确保在同一时刻只有一个线程可以访问共享资源。以下是它的一个基本使用示例:
```c
#include <pthread.h> // 引入线程库
// 定义全局互斥锁变量
pthread_mutex_t mutex;
// 初始化互斥锁
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr) {
if (pthread_mutex_init(&mutex, NULL) != 0) {
perror("Mutex initialization failed");
return 1;
}
return 0;
}
// 示例函数,需要获取锁才能执行
void thread_function(void* arg) {
pthread_mutex_lock(&mutex); // 尝试获取锁
if (pthread_mutex_trylock(&mutex) == EBUSY) { // 如果已锁,等待
printf("Waiting for the lock...\n");
pthread_mutex_lock(&mutex);
}
// 现在锁已被获取,可以在临界区更新共享数据
// ...
pthread_mutex_unlock(&mutex); // 释放锁
}
int main() {
pthread_t my_thread; // 创建一个新的线程
// 创建并初始化线程
if (pthread_create(&my_thread, NULL, thread_function, NULL) != 0) {
perror("Thread creation failed");
return 1;
}
// 等待线程结束
pthread_join(my_thread, NULL);
// 销毁互斥锁
pthread_mutex_destroy(&mutex);
return 0;
}
```
在这个例子中,如果主线程试图解锁一个已经被其他线程持有的锁,`pthread_mutex_lock()`会阻塞,直到锁被释放。当线程完成对资源的操作后,应该使用`pthread_mutex_unlock()`来释放锁。
阅读全文