linux 互斥锁

int pthread_mutexattr_init(pthread_mutexattr_t *attr);
 int pthread_mutexattr_destroy(pthread_mutexattr_t *attr); 毁一个属性对象,在重新进行初始化之前该结构不能重新使用


 int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int kind); 

 LinuxThreads只支持一种互斥体属性:互斥体的类型,fast类型的互斥体值为PTHREAD_MUTEX_FAST_NP,recursive类型的互斥体值为PTHREAD_MUTEX_RECURSIVE_NP,error checking类型的互斥体值为PTHREAD_MUTEX_ERRORCHECK_NP。就像NP后缀暗示的那样,这是POSIX标准的不可移植的扩展,不应该出现在将要进行移植的程序中。

* PTHREAD_MUTEX_TIMED_NP,这是缺省值,也就是普通锁。当一个线程加锁以后,其余请求锁的线程将形成一个等待队列,并在解锁后按优先级获得锁。这种锁策略保证了资源分配的公平性。

  * PTHREAD_MUTEX_RECURSIVE_NP,嵌套锁,允许同一个线程对同一个锁成功获得多次,并通过多次unlock解锁。如果是不同线程请求,则在加锁线程解锁时重新竞争。

  * PTHREAD_MUTEX_ERRORCHECK_NP,检错锁,如果同一个线程请求同一个锁,则返回EDEADLK,否则与PTHREAD_MUTEX_TIMED_NP类型动作相同。这样就保证当不允许多次加锁时不会出现最简单情况下的死锁。

  * PTHREAD_MUTEX_ADAPTIVE_NP,适应锁,动作最简单的锁类型,仅等待解锁后重新竞争。


 int pthread_mutexattr_gettype(const pthread_mutexattr_t *attr, int *kind);

pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int kind); PTHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_SHARED 前者用来不同进程中的线程同步,后者用于同步本进程的不同线程

posted on 2013-07-20 17:12  吴小亮  阅读(119)  评论(0)    收藏  举报

导航