Linux -- 互斥锁
互斥锁
互斥锁核心概念
互斥锁(Mutex):用于多线程之间对共享资源的互斥访问,保证同一时刻只有一个线程能进入临界区执行。
作用:解决线程并发时的数据混乱、覆盖、计算错误
本质:一把二值锁(0/1)
原则:同一时间只允许一个线程持有锁
互斥锁四大函数
头文件:
#include <pthread.h>
1. 初始化互斥锁
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
mutex:互斥锁变量地址
attr:属性,一般填NULL
返回:成功 0,失败非 0
2. 加锁(阻塞)
int pthread_mutex_lock(pthread_mutex_t *mutex);
能拿到锁:直接上锁,继续执行
拿不到锁:阻塞等待,直到锁被释放
3. 解锁
int pthread_mutex_unlock(pthread_mutex_t *mutex);
释放锁,唤醒等待该锁的线程
4. 销毁锁
int pthread_mutex_destroy(pthread_mutex_t *mutex);
用完锁必须销毁,释放资源
使用流程(固定模板)
定义全局互斥锁:
pthread_mutex_t mutex;初始化:
pthread_mutex_init(&mutex, NULL);访问共享资源前:lock
访问完共享资源:unlock
最后销毁:
pthread_mutex_destroy(&mutex);
考点(⭐)
互斥锁保证临界区同一时间只有一个线程执行
加锁必须成对出现:lock ↔ unlock
忘记解锁 →死锁,程序卡死
锁的粒度越小,并发效率越高
只锁共享资源,不锁无关代码
互斥锁属于线程级,不能用于进程间
互斥锁 = 线程安全的通行证
谁拿到锁谁执行临界区,没拿到就阻塞等待,保证数据不乱。
