12.3 线程属性
pthread接口允许我们通过设置与不同对象相关联的属性来微调线程以及同步对象的行为。通常来说,管理这些属性的函数符合如下模式:
- 每一个对象都有与其相关联的属性对象类型(线程由线程属性,互斥锁由互斥锁属性,等等),一个属性对象可以表示多个属性。属性对象对于应用程序来说是不透明的,也就是说应用程序并支持获取属性对象内部结构,这能够促进应用程序的移植。取而代之的是,应用程序需要使用函数来对这些属性进行管理。
- 一个初始化函数用于设置属性对象默认值;
- 另一个函数用于释放属性对象。如果初始化函数为属性对象分配了与属性对象相关联的任何资源,该函数都将会释放掉这些资源;
- 每一个属性都由一个函数用于获取属性对象的属性值。该函数在成功的时候返回0,在失败的时候返回错误编号,返回的属性值通过其中一个参数返回。
- 每一种属性都由一个函数用于设置一个属性值,在这种情况下,该数值通过参数value传入。
在11章我们调用函数pthread_create的程序中,我们传递了一个NULL指针给参数pthread_attr_t结构指针。事实上,我们可以使用pthread_attr_t结构来更改线程默认属性,并将其与我们创建的线程关联起来,我们使用函数pthread_attr_init函数来初始化pthread_attr_t结构,在调用函数pthread_attr_init之后,pthread_attr_t结构将会包含所有实现支持的线程属性的默认值。
#include <pthread.h>
int pthread_attr_init(pthread_attr_t *attr);
int pthread_attr_destroy(pthread_attr_t *attr);
Both return: 0 if OK, error number on failure.
函数pthread_attr_destroy将会释放掉初始化时分配的动态内存,并且设置属性对象为无效数值,所以如果它被错误地使用,函数pthread_create将会返回一个错误。