Linux系统编程---线程同步---互斥量

互斥量是信号灯的特殊形式。
mutex: mut表示相互(mutual) ,ex表示排斥(exclusion)。

1.互斥量的初始化
静态初始化
pthread_mutex_t   _mutex  =  PTHREAD_MUTEX_INITIALIZER
动态初始化
int  pthread_mutex_init(phtread_mutex_t  * mutex, phtread_mutexattr_t  * attr)
返回值
0:成功
其他:错误编号

2.互斥量销毁
int  pthread_mutex_destroy(pthread_mutex_t  * mutex)
返回值
0:成功
其他:错误编号

3.加锁
int  pthread_mutex_lock(pthread_mutex_t  * mutex)
int  pthread_mutex_trylock(pthread_mutex_t  *  mutex)
对已加锁的锁trylock返回EBUSY,反之则加锁并返回0

4.解锁
int  pthread_mutex_unlock(pthred_mutex_t  * mutex)
  • 如 果mutex 对象的type是 PTHREAD_MUTEX_NORMAL,不进行deadlock detection(死锁检测)。企图进行relock 这个mutex会导致deadlock. 如果一个线程对未加锁的或已经unlock的mutex对象进行unlock操作,结果是不未知的。
  • 如 果mutex类型是 PTHREAD_MUTEX_ERRORCHECK,那么将进行错误检查。如果一个线程企图对一个已经锁住的mutex进行relock,将返回一个错 误。如果一个线程对未加锁的或已经unlock的mutex对象进行unlock操作,将返回一个错误。
  • 如 果mutex类型是 PTHREAD_MUTEX_RECURSIVE,mutex会有一个锁住次数(lock count)的概念。当一个线程成功地第一次锁住一个mutex的时候,锁住次数(lock count)被设置为1,每一次一个线程unlock这个mutex的时候,锁住次数(lock count)就减1。当锁住次数(lock count)减少为0的时候,其他线程就能获得该mutex锁了。如果一个线程对未加锁的或已经unlock的mutex对象进行unlock操作,将返 回一个错误。
  • 如果mutex类型是 PTHREAD_MUTEX_DEFAULT,企图递归的获取这个mutex的锁的结果是不确定的。unlock一个不是被调用线程锁住的mutex的结果也是不确定的。企图unlock一个未被锁住的mutex导致不确定的结果。
5.对锁变量属性的操作:
int  pthread_mutexattr_getpshared( const  pthread_mutexattr_t  * attr, int   * pshared);
int  pthread_mutexattr_setpshared(pthread_mutexattr_t  * attr, int  pshared);
get函数用来查询pthread_mutexattr_t结构的进程共享属性
set函数用来修改该属性。
以上两个函数都是成功返回0,失败返回错误编号。

int  pthread_mutexattr_gettype( const  pthread_mutexattr_t  * attr, int   * type)
int  pthread_mutexattr_settype(pthread_mutextattr_t  * attr, int  type)
以上两个函数用来修改互斥量类型属性,从字面意思就知道是干啥了,这里就不多解释了。
返回值还是成功返回0,失败返回错误编号。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值