一、线程属性
可以使用pthread_attr_t结构修改线程默认属性,并这些属性和创建的线程练习起来,可以使用pthread_att_init函数初始化pthread_attr_t结构,调用pthread_attr_init后,pthread_attr_t结构所包含的就是操作系统实现支持的所有线程属性的默认值。
pthread_attr_destroy用于销毁属性对象,释放资源。
#include <pthread.h> int pthread_attr_init(pthread_attr_t *attr) int pthread_attr_destroy(pthread_attr_t *attr)
线程属性有四个:
1.detachstate 线程的分离状态属性
2.guardsize 线程栈末尾的警戒缓冲区大小(字节数)
3.stackaddr 线程栈的最低地址
4.stacksize 线程栈的最小长度
如果在创建线程时就知道不需要了解线程的终止状态,可以修改pthread_attr_t结构中的detachstate属性,让线程一开始就处于分离状态。可以使用pthread_attr_setdetachstate把线程属性detachstate设置为以下两个合法值之一:PTHREAD_CREATE_DETACHED,PTHREAD_CREATE_JOINABLE.
#include <pthread.h> int pthread_attr_getdetachstate(const pthread_attr_t *restrict attr, int *detachstate); int pthread_attr_setdetachstate(const pthread_attr_t *attr, int *detachstate);
例子:
#include "apue.h" #include <pthread.h> int makethread(void *(*fn)(void *), void *arg) { int err; pthread_t tid; pthread_attr_t attr; err = pthread_attr_init(&attr); if (err != 0) { return err; } err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if (err == 0) { err = pthread_create(&tid, &attr, fn, arg); } pthread_attr_destroy(&attr); return err; }