2024年6月1日发(作者:)
Linux--Linux互斥锁、条件变量和信号量
进行多线程编程,最应该注意的就是那些共享的数据,因为无法知道哪个线程会在哪
个时候对它进行操作,也无法得知哪个线程会先运行,哪个线程会后运行。所以,要对这
些资源进行合理的分配和正确的使用。在Linux下,提供了互斥锁、条件变量和信号量来
对共享资源进行保护。
一、互斥锁
互斥锁,是一种信号量,常用来防止两个进程或线程在同一时刻访问相同的共享资源。
需要的头文件:pthread.h
互斥锁标识符:pthread_mutex_t
(1)互斥锁初始化:
函数原型: int pthread_mutex_init (pthread_mutex_t* mutex,const
pthread_mutexattr_t* mutexattr);
函数传入值:
mutex:互斥锁。
mutexattr:PTHREAD_MUTEX_INITIALIZER 创建快速互斥锁。
PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP 创建递归互斥锁。
PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP 创建检错互斥锁。
函数返回值:成功:0;出错:-1
(2)互斥操作函数
int pthread_mutex_lock(pthread_mutex_t* mutex); //上锁
int pthread_mutex_trylock (pthread_mutex_t* mutex); //只有在互斥被锁住的情
况下才阻塞
int pthread_mutex_unlock (pthread_mutex_t* mutex); //解锁
int pthread_mutex_destroy (pthread_mutex_t* mutex); //清除互斥锁
函数传入值:mutex:互斥锁。
函数返回值:成功:0;出错:-1
使用形式:
pthread_mutex_t mutex;
pthread_mutex_init (&mutex, NULL); /*定义*/


发布评论