pthread互斥信号量使用总结(2)

五、pthread接口使用说明
pthread_mutex_init:    根据指定的属性初始化一个mutex,状态为空闲。
pthread_mutex_destroy: 删除一个mutex
pthread_mutex_lock/trylock/timedlock/unlock: 获取锁、释放锁。没有竞争关系的情况下在用户态只需要置下锁的状态值即返回了,无须陷入内核。但是timedlock的入参为超时时间,一般需要调用系统API获取,会导致陷入内核,性能较差,实现上,可先trylock,失败了再timedlock。

pthread_mutexattr_init:配置初始化
pthread_mutexattr_destroy:删除配置初始化接口申请的资源
pthread_mutexattr_setpshared:设置mutex是否进程间共享
pthread_mutexattr_settype:设置类型,如递归调用,错误检测等。
pthread_mutexattr_setprotocol:设置是否支持优先级翻转
pthread_mutexattr_setprioceiling:设置获取信号量的任务运行在最高优先级。
每个set接口都有对应的get接口。


六、pthread结构变量说明


struct __pthread_mutex_s
{
int __lock; ----31bit:这个锁是否有等待者;30bit:这个锁的owner是否已经挂掉了。其他bit位:0锁状态空闲,非0为持有锁的任务PID;
unsigned int __count; ----获取锁的次数,支持嵌套调用,每次获取到锁值加1,释放减1。
int __owner; ----锁的owner
unsigned int __nusers; ----使用锁的任务个数,通常为1(被占用)或0(空闲)
int __kind;----锁的属性,如递归调用,优先级翻转等。
int __spins; ----SMP下,尝试获取锁的次数,尽量不进入内核。
__pthread_list_t __list; ----把锁插入回收链表,如果支持回收功能,每次获取锁时要插入任务控制块的回收链表。
}__data;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/64f6aeb2d33879e26e6da78d2835c435.html