Single UNIX Specification目前定义了条件变量的两个属性:进程共享属性和时钟属性。与其他的属性对象一样,有一对函数用于初始化和反初始化条件变量属性。
#include <pthread.h>
int pthread_condattr_init(pthread_condattr_t *attr);
int pthread_condattr_destroy(pthread_condattr_t *attr);
//两个函数的返回值:若成功,返回0;否则,返回错误编号
与其他的同步属性一样,条件变量支持进程共享属性。它控制着条件变量是可以被单进程的多个线程使用,还是可以被多进程的线程使用。要获取进程共享属性的当前值,可以用pthread_condattr_getpshared
函数。设置该值可以用pthread_condattr_setpshared
函数。
#include <pthread.h>
int pthread_condattr_getpshared(const pthread_condattr_t *restrict attr, int *restrict pshared);
int pthread_condattr_setpshared(pthread_condattr_t*attr,int pshared);
//两个函数的返回值:若成功,返回0;否则,返回错误编号
时钟属性控制计算pthread_cond_timedwait
函数的超时参数(tsptr)时采用的是哪个时钟。合法值取自图 6-8 中列出的时钟 ID。可以使用 pthread_condattr_getclock
函数获取可被用于pthread_cond_timedwait
函数的时钟 ID,在使用pthread_cond_timedwait
函数前需要用pthread_condattr_t
对象对条件变量进行初始化。可以用pthread_condattr_setclock
函数对时钟ID进行修改。
#include <pthread.h>
int pthread_condattr_getclock(const pthread_condattr_t *restrict attr, clockid_t *restrict clock_id);
int pthread_condattr_setclock(pthread_condattr_t *attr, clockid_t clock_id);
//两个函数的返回值:若成功,返回0;否则,返回错误编号
奇怪的是,Single UNIX Specification并没有为其他有超时等待函数的属性对象定义时钟属性。