《unix高级环境编程》线程控制——同步属性

        在前面章节介绍的《线程同步》都是默认属性,这里将要介绍在线程同步的互斥量、读写锁和条件变量的属性,可以指定一些属性来避免死锁等情况。

互斥量属性

        互斥量属性可以用 pthread_mutexattr_t 数据结构来进行操作,属性的初始化操作如下:

/* 同步属性 */

/* 互斥量属性 */
/*
 * 函数功能:初始化互斥量属性;
 * 返回值:若成功则返回0,否则返回错误编码;
 * 函数原型:
 */
#include <pthread.h>
int pthread_mutexattr_init(pthread_mutexattr_t *attr);
int pthread_mutexattr_destroy(pthread_mutexattr_t *attr);
/*
 * 说明:
 * pthread_mutexattr_init函数用默认的互斥量属性初始化pthread_mutexattr_t结构;
 * 两个属性是进程共享属性和类型属性;
 */

/*
 * 函数功能:获取或修改进程共享属性;
 * 返回值:若成功则返回0,否则返回错误编码;
 * 函数原型:
 */
#include <pthread.h>
int pthread_mutexattr_getpshared(const pthread_mutexattr_t *attr, int *pshared);//获取互斥量的进程共享属性
int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared);//设置互斥量的进程共享属性
/*
 * 说明:
 * 进程共享互斥量属性设置为PTHREAD_PROCESS_PRIVATE时,允许pthread线程库提供更加有效的互斥量实现,这在多线程应用程序中是默认的;
 * 在多个进程共享多个互斥量的情况下,pthread线程库可以限制开销较大的互斥量实现;
 */

/*
 * 函数功能:获取或修改类型属性;
 * 返回值:若成功则返回0,否则返回错误编码;
 * 函数原型:
 */
int pthread_mutexattr_gettype(const pthread_mutexattr_t *attr, int *type);//获取互斥量的类型属性
int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type);//修改互斥量的类型属性
       互斥量类型的控制如下所示:

 互斥量类型	没有解锁时再次加锁	不占用时解锁	已解锁时再次解锁
 PTHREAD_MUTEX_NORMAL	 死锁	未定义	未定义
 PTHREAD_MUTEX_ERRORCHECK	 返回错误	返回错误	返回错误
 PTHREAD_MUTEX_RECURSIVE	 允许	返回错误	返回错误
 PTHREAD_MUTEX_DEFAULT	 未定义	未定义	未定义

读写锁属性

        读写锁属性只有进程共享属性,其属性操作如下:

/* 读写锁属性 */
/*
 * 函数功能:初始化读写锁属性;
 * 返回值:若成功则返回0,否则返回错误编码;
 * 函数原型:
 */
#include <pthread.h>
int pthread_rwlockattr_init(pthread_rwlockattr_t *attr);
int pthread_rwlockattr_destroy(pthread_rwlockattr_t *attr);
/*
 * 说明:
 * 读写锁的唯一属性就是进程共享,该属性与互斥量的进程共享相同;
 */

/*
 * 函数功能:获取或修改读写锁的进程共享属性;
 * 返回值:若成功则返回0,否则返货错误编码;
 * 函数原型:
 */
int pthread_rwlock_getpshared(const pthread_rwlockattr_t *attr, int *pshared);
int pthread_rwlock_setpshared(pthread_rwlockattr_t *attr, int pshared);

条件变量属性

        条件变量也只有进程共享属性,其操作如下:

/* 条件变量属性 */
/*
 * 函数功能:初始化条件变量属性;
 * 返回值:若成功则返回0,否则返回错误编码;
 * 函数原型:
 */
#include <pthread.h>
int pthread_condattr_init(pthread_condattr_t *attr);
int pthread_condattr_destroy(pthread_condattr_t *attr);
/*
 * 函数功能:获取或修改进程共享属性;
 * 返回值:若成功则返回0,否则返回错误编码;
 * 函数原型:
 */
#include <pthread.h>
int pthread_condattr_getpshared(const pthread_condattr_t *attr, int *pshared);
int pthread_condattr_setpshared(pthread_condattr_t *attr, int pshared);
参考资料:

《UNIX高级环境编程》

你可能感兴趣的:(互斥量属性,读写锁属性,条件变量属性,同步属性)