在你掌握了互斥量的属性(共享属性、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

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

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

4. 总结

  • 本文内容只需要了解即可