在你掌握了互斥量的属性(共享属性、robust 属性、类型属性)之后,其它的互斥与同步对象属性其实都是一样的。
因为前面已经对互斥量属性进行了一一研究,所以本文内容只要了解即可。知识都是相通的。
1. 读写锁的属性
读写锁唯一的属性就是进程共享属性,这和互斥量进程共享属性是一样一样的。它有两种情况:
PTHREAD_PROCESS_PRIVATE
PTHREAD_PROCESS_SHARED
相关函数如下:
int pthread_rwlockattr_init(pthread_rwlockattr_t *attr);
int pthread_rwlockattr_destroy(pthread_rwlockattr_t *attr);
int pthread_rwlockattr_getshared(const pthread_rwlockattr_t *attr, int *pshared);
int pthread_rwlockattr_setshared(pthread_rwlockattr_t *attr, int pshared);
2. 条件变量的属性
Single UNIX Specification 为条件变量定义了两个属性:
- 进程共享属性
- 时钟属性
条件变量属性的初始化函数:
int pthread_condattr_init(pthread_condattr_t *attr);
int pthread_condattr_destroy(pthread_condattr_t *attr);
2.1 进程共享属性
它有两种情况:
PTHREAD_PROCESS_PRIVATE
PTHREAD_PROCESS_SHARED
相关函数如下:
int pthread_condattr_getshared(const pthread_condattr_t *attr, int *pshared);
int pthread_condattr_setshared(pthread_condattr_t *attr, int pshared);
2.2 时钟属性
这个属性主要针对 pthread_cond_timewait 函数,它用来控制采用的是哪个时钟。
时钟 ID | 选项 | 说明 |
---|---|---|
CLOCK_REALTIME | 实时系统时间(类似于 time 函数) | |
CLOCK_MONOTONIC | _POSIX_MONOTONIC_CLOCK | 没有负跳数的实时系统时间 |
CLOCK_PROCESS_CPUTIME_ID | _POSIX_CPUTIME | 调用进程的 CPU 时间 |
CLOCK_THREAD_CPUTIME_ID | _POSIX_THREAD_CPUTIME | 调用线程的 CPU 时间 |
相关函数如下:
int pthread_condattr_getclock(const pthread_condattr_t *attr, clockid_t *clock_id);
int pthread_condattr_setclock(pthread_condattr_t *attr, clockid_t clock_id);
注意:除了条件变量属性外,Single UNIX Specification 并没有为其他有超时等待函数的属性对象定义时钟属性。
3. barrier 属性
barrier 唯一的属性就是进程共享属性,同互斥量进程共享属性是一样,它有两种情况:
PTHREAD_PROCESS_PRIVATE
PTHREAD_PROCESS_SHARED
相关函数如下:
int pthread_barrierattr_init(pthread_barrierattr_t *attr);
int pthread_barrierattr_destroy(pthread_barrierattr_t *attr);
int pthread_barrierattr_getshared(const pthread_barrierattr_t *attr, int *pshared);
int pthread_barrierattr_setshared(pthread_barrierattr_t *attr, int pshared);
4. 总结
- 本文内容只需要了解即可