互斥量属性:
进程共享属性:两个值:PTHREAD_PROCESS_PRIVATE和PTHREAD_PROCESS_SHARED。前者用于在同一个进程的多个线程之间实现同步。后面的用于在进程间进行通行的时候实现进程间的同步。默认的属性是PRIVATE.
类型属性:PTHREAD_MUTEX_NORMAL,标准的互斥量属性,并不做任何特殊的错误检查或者是死锁检测。
PTHREAD_MUTEX_ERRORCHECK:提供错误检查
PTHREAD_MUTEX_RECURSIVE:允许同一个线程在互斥量解锁之前对该互斥量进行多次加锁.(注意必须是同一个线程才行).使用一个递归互斥量维护锁的计数,在解锁和加锁次数不相同的情况下不会释放锁。
PTHREAD_MUTEX_DEFAULT:请求默认的语义,操作系统在实现它的时候可以将其自由地映射到其他类型。
下面主要说说递归锁:首先apue上面说:不要将递归锁与条件变量相关联,其实原因很简单的。因为如果一把锁是递归锁,并且在调用condwait之前对其多次加锁了,由上面的说明中我们知道需要加锁次数与解锁次数相同才会真正的释放锁,但是这个时候如果我们将其和条件变量相关联起来的话,就会出现可能在condwait的条件不满足的时候,这个时候我们知道是会解锁的,但只会解锁一次,很有可能这把锁还在这个线程手中,这个时候就造成了最为可怕的死锁。。所以条件变量尽量不予递归锁相关联。
注意的一点是:递归锁对于同一个线程来说是可重入的,但是对于不同的线程来说是普通的互斥锁。
读写锁属性:
进程间共享属性
条件变量属性:
进程间共享属性