POSIX 互斥锁&属性块

目录

互斥锁属性块

1.互斥锁属性块的初始化和删除

2.设置和获取互斥锁属性块的类型

3.设置和获取互斥锁属性块的算法类型

4.设置和获取互斥锁属性块的天花板优先级

5.设置和获取互斥锁属性块的进程共享属性

互斥锁

1.互斥锁的初始化和删除

2.互斥锁的等待

3.互斥锁的释放

4.设置和获取互斥锁的天花板优先级


  •  POSIX 互斥锁是对共享资源进行互斥访问的“POSIX”接口函数,实现的作用与SylixOS 互斥信号量相同。
  • 同线程具有属性对象一样,POSIX 互斥锁同样具有自己的属性对象,创建一个POSIX 互斥锁需要使用 POSIX 互斥锁属性块
  • 初始化:POSIX互斥锁使用以前必须首先进行初始化,可以把 mutex 初始值设置为 PTHREAD_MUTEX_INITIALIZER(静态初始化),也可以调用 pthread_mutex_init 函数进行动态初始化。 
互斥锁属性块&互斥锁函数

互斥锁属性块

1.互斥属性块的初始化和删除

#include <pthread.h>

int pthread_mutexattr_init(pthread_mutexattr_t *pmutexattr);
int pthread_mutexattr_destroy(pthread_mutexattr_t *pmutexattr);
  • 函数成功返回 0,失败返回错误号;
  • (输出)参数 pmutexattr 是 POSIX 互斥锁属性块的指针。

2设置和获取互斥属性块的类型

#include <pthread.h>

int pthread_mutexattr_settype(pthread_mutexattr_t *pmutexattr, int type);
int pthread_mutexattr_gettype(const pthread_mutexattr_t *pmutexattr, int *type);
  • 函数成功返回 0,失败返回错误号;
  • 参数 pmutexattr 是 POSIX 互斥锁属性块的指针;
  • (输出)参数 type 是 POSIX 互斥锁属性块的类型。
表 1.1 互斥锁属性块的类型

宏名

宏名

PTHREAD_MUTEX_NORMAL

递归加锁时产生死锁

PTHREAD_MUTEX_ERRORCHECK

递归加锁时返回错误

PTHREAD_MUTEX_RECURSIVE

支持递归加锁

 

3.设置和获取互斥属性块的算法类型

#include <pthread.h>

int pthread_mutexattr_setprotocol(pthread_mutexattr_t *pmutexattr, int protocol);
int pthread_mutexattr_getprotocol( const pthread_mutexattr_t *pmutexattr, int protocol );
  • 此函数成功返回 0,失败返回错误号;
  • 参数 pmutexattr 是 POSIX 互斥锁属性块的指针;
  • (输出)参数 protocol 是 POSIX 互斥锁属性块的算法类型。
表 1.2 互斥信号量属性块的算法类型

宏名

宏名

PTHREAD_PRIO_NONE

优先级继承算法,按先入先出顺序等待

PTHREAD_PRIO_INHERIT

优先级继承算法,按优先级顺序等待

PTHREAD_PRIO_PROTECT

优先级天花板

 

4.设置和获取互斥属性块的天花板优先级

#include <pthread.h>

int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *pmutexattr, int prioceiling);
int pthread_mutexattr_getprioceiling( const pthread_mutexattr_t *pmutexattr, int *prioceiling );
  • 此函数成功返回 0,失败返回错误号;
  • 参数 pmutexattr 是 POSIX 互斥锁属性块的指针;
  • (输出)参数 prioceiling 是 POSIX 互斥锁属性块的天花板优先级。

5.设置和获取互斥属性块的进程共享属性

#include <pthread.h>

int pthread_mutexattr_setpshared(pthread_mutexattr_t *pmutexattr, int pshared);
int pthread_mutexattr_getpshared(const pthread_mutexattr_t *pmutexattr, int *pshared);
  • 此函数返回 0;
  • 参数 pmutexattr 是 POSIX 互斥锁属性块的指针;
  • (输出)参数 pshared 标识了 POSIX 互斥锁属性块是否进程共享。
表 1.3 进程共享参数

宏名

宏名

PTHREAD_PROCESS_SHARED

进程共享

PTHREAD_PROCESS_PRIVATE

进程私有

 

互斥

1.互斥的初始化和删除

#include <pthread.h>

int pthread_mutex_init(pthread_mutex_t *pmutex, const pthread_mutexattr_t *pmutexattr);
int pthread_mutex_destroy(pthread_mutex_t *pmutex);
  • 此函数成功返回 0,失败返回错误号;
  • 参数 pmutex 是 POSIX 互斥锁的指针;
  • 参数 pmutexattr 是 POSIX 互斥锁属性块的指针,可以为 NULL;

2.互斥锁的等待

#include <pthread.h>

int pthread_mutex_lock(pthread_mutex_t *pmutex);                   /* 互斥锁的等待       */

int pthread_mutex_trylock(pthread_mutex_t *pmutex);                /* 互斥锁尝试等待     */

int pthread_mutex_timedlock(pthread_mutex_t *pmutex, const struct timespec *abs_timeout);
                                                                   /* 互斥锁绝对超时时间等待*/

int pthread_mutex_reltimedlock_np(pthread_mutex_t *pmutex, const struct timespec *rel_timeout);
                                                                   /* 互斥锁绝对超时时间等待*/
  • 函数成功返回 0,失败返回错误号;
  • 参数 pmutex 是 POSIX 互斥锁的指针;
  • 参数 abs_timeout 是等待的绝对超时时间; 使用时在当前时间的基础上再加上一个相对超时时间就能得到绝对超时时间 abs_timeout。
  • 参数 rel_timeout 是等待的相对超时时间。 

注意:pthread_mutex_reltimedlock_np 是 pthread_mutex_timedlock 的非 POSIX 标准版本。

3.互斥锁的释放

#include <pthread.h>

pthread_mutex_unlock(pthread_mutex_t *pmutex);
  • 此函数成功返回 0,失败返回错误号;
  • 参数 pmutex 是 POSIX 互斥锁的指针。

4.设置和获取互斥的天花板优先级

#include <pthread.h>

int pthread_mutex_setprioceiling(pthread_mutex_t *pmutex, int prioceiling);
int pthread_mutex_getprioceiling(pthread_mutex_t *pmutex, int *prioceiling);  
  • 此函数成功返回 0,失败返回错误号;
  • 参数 pmutex 是 POSIX 互斥锁的指针;
  • (输出)参数 prioceiling 是 POSIX 互斥锁的天花板优先级。

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值