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); /*定义*/