Skip to content

pthread_mutexattr_settype

果冻虾仁 edited this page Mar 1, 2015 · 3 revisions

设置互斥锁属性对象(pthread_mutexattr_t)的属性 ##函数原型

#include <pthread.h>

int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int kind);

##参数

  • attr是要设置属性的互斥锁属性对象
  • kind是互斥锁的种类(即属性)

##返回值 成功返回0,失败返回非0的错误代码

##属性种类 Linux支持3种互斥锁锁,它们的名称以后缀**_NP**结尾,表示non-portable,是不标准的锁名称。但实际上它们在实现的时候常常和POSIX标准的三种锁等价。

Linux 互斥锁 对应的POSXI互斥锁
PTHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_NORMAL
PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
PTHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK
为保持程序兼容性,应该避免使用NP后缀的互斥锁名称。
###正常锁
(PTHREAD_MUTEX_NORMAL)

这种互斥锁不能自己检测死锁,如果一个线程尝试给已经加锁的互斥锁再次加锁,就会导致死锁。解锁一个被其他线程加锁的互斥锁会导致未定义结果。

Linux中另有一互斥锁PTHREAD_MUTEX_DEFAULT与该锁等价。

###递归锁 (PTHREAD_MUTEX_RECURSIVE) 递归锁维护一个锁的数量。同一线程可以多次加锁,每加锁一次,锁的数量加1。解锁一次,锁的数量减一,直到锁的数量为0,该锁被释放。
当线程解锁其他线程的递归锁的时候,解锁会失败。 ###错误检查锁 (PTHREAD_MUTEX_ERRORCHECK)

锁的每一个操作都会进行错误检查,因此错误检查锁较慢,但是容易调试,便于发现一个应用程序在哪里违反了锁的规则。

Linux环境编程API

C语言API包含部分标准C的API、POSIX标准的系统编程API(一些Linux独有的系统API会单独注明)。

头文件源码

大部分头文件源码在/usr/include目录下。

安装man手册

因为涉及到大量的POSIX编程。所以最好下载POSIX函数的man手册。

Ubuntu

apt-get install manpages-posix        
apt-get install manpages-posix-dev

默认安装了manpages-dev,所以不装POSIX的man手册是可以查看绝大部分API的。
但是不装的话,有些API是不能看到的,比如posix_spawn函数。

CentOS

yum install man-pages.noarch

关于目录

左侧的目录并非以函数为索引依据,主要是以系统的man手册页面为索引依据。
比如exec里面包含6个函数、pipe里面包含pipe()和pipe2()两个函数,但是它们都是属于一个man页面中。

Clone this wiki locally