+975/!849/F!/55:567/6!1,检错锁,如果同一个线程请求同一个锁,则返回 //,否
则与 975/!849/F!98/!1 类型动作相同。这样就保证当不允许多次加锁时不会出现最简单情况下
的死锁。
+975/!849/F!92/!1,适应锁,动作最简单的锁类型,仅等待解锁后重新竞争
!> ,! 将属性对象的值初始化为缺省值,并分配属性对象占用的空间。
设置互斥锁属性函数:
!> ,! * !> ,!+> ,
用来设置互斥锁变量的作用域,
975/!5:6/!75/在多个进程中的线程之间共享互斥锁,可以在共享内存中创建互斥锁
975/!5:6/!529/仅有那些由同一个进程创建的线程才能够处理该互斥锁
!> ,!,&* !> ,!+ ,&)
可用来设置互斥锁的 &属性类型属性的缺省值为 975/!849/F!/C49。
PTHREAD_MUTEX_NORMAL
此类型的互斥锁不会检测死锁。如果线程在不首先解除互斥锁的情况下尝试重新锁定该互斥锁,则会产生
死锁。尝试解除由其他线程锁定的互斥锁会产生不确定的行为。如果尝试解除锁定的互斥锁未锁定,则会
产生不确定的行为。
PTHREAD_MUTEX_ERRORCHECK
此类型的互斥锁可提供错误检查。如果线程在不首先解除锁定互斥锁的情况下尝试重新锁定该互斥锁,则
会返回错误。如果线程尝试解除锁定的互斥锁已经由其他线程锁定,则会返回错误。如果线程尝试解除锁
定的互斥锁未锁定,则会返回错误。
PTHREAD_MUTEX_RECURSIVE
如果线程在不首先解除锁定互斥锁的情况下尝试重新锁定该互斥锁,则可成功锁定该互斥锁。 与
975/!849/F!1:58类型的互斥锁不同,对此类型互斥锁进行重新锁定时不会产生死锁情况。多次
锁定互斥锁需要进行相同次数的解除锁定才可以释放该锁,然后其他线程才能获取该互斥锁。如果线程尝
试解除锁定的互斥锁已经由其他线程锁定,则会返回错误。 如果线程尝试解除锁定的互斥锁未锁定,则
会返回错误
PTHREAD_MUTEX_DEFAULT
如果尝试以递归方式锁定此类型的互斥锁,则会产生不确定的行为。对于不是由调用线程锁定的此类型互
斥锁,如果尝试对它解除锁定,则会产生不确定的行为。对于尚未锁定的此类型互斥锁,如果尝试对它解
除锁定,也会产生不确定的行为。允许在实现中将该互斥锁映射到其他互斥锁类型之一
应用互斥量需要注意的几点
互斥量需要时间来进行加锁和解锁。锁住较少互斥量的程序通常运行更快。所以互斥量应尽量少,够
用即可,每个互斥量保护的区域应则尽量大。
互斥量的本质是串行执行,如果很多线程需要频繁的加锁同一个互斥量,则线程的大部分时间就会在
等待,这对性能是有害的,如果互斥量保护的数据*或代码保护彼此无关的片段,则可以把特大的互
斥量分解为几个小互斥量来提高性能,这样任意时刻需要小互斥量的线程就会减少,线程等待时间就
会减少,所以互斥量应该足够多,每个互斥量保护的区域应该足够少。