Linux线程同步之互斥量加锁解锁
时间: 2023-06-20 15:07:17 浏览: 53
在多线程编程中,为了防止多个线程同时访问共享资源而导致的数据竞争问题,需要使用同步机制来实现线程间的协调和互斥。而互斥量是一种常用的同步机制,在多线程编程中被广泛使用。
互斥量是一种线程同步原语,用于保护共享资源。当一个线程需要访问共享资源时,它需要先获取该资源的互斥量。如果该互斥量已经被其他线程占用,则当前线程会被阻塞,直到该互斥量被释放。一旦该互斥量被释放,当前线程就可以获取该互斥量,访问共享资源,并将该互斥量加锁。当该线程完成对共享资源的访问后,它需要将该互斥量解锁,以便其他线程可以获取该互斥量继续访问共享资源。
互斥量的使用一般涉及到以下四个函数:
1. pthread_mutex_init():初始化互斥量;
2. pthread_mutex_lock():加锁互斥量;
3. pthread_mutex_unlock():解锁互斥量;
4. pthread_mutex_destroy():销毁互斥量。
下面是一个简单的例子,展示了如何使用互斥量实现线程同步:
```
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t mutex; // 定义互斥量
void *thread_func(void *arg)
{
pthread_mutex_lock(&mutex); // 加锁互斥量
printf("Thread %ld is running.\n", pthread_self());
pthread_mutex_unlock(&mutex); // 解锁互斥量
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
pthread_t t1, t2;
pthread_mutex_init(&mutex, NULL); // 初始化互斥量
pthread_create(&t1, NULL, thread_func, NULL);
pthread_create(&t2, NULL, thread_func, NULL);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
pthread_mutex_destroy(&mutex); // 销毁互斥量
return 0;
}
```
在上面的例子中,我们定义了一个互斥量 mutex,然后在线程函数中分别加锁和解锁该互斥量。在主函数中,我们创建了两个线程,并等待它们执行完毕后退出程序。需要注意的是,我们必须在程序退出之前销毁该互斥量,以免产生内存泄漏。