一、线程的属性
创建线程时,可以指定线程的属性。
结构体:pthread_attr_t attr;
初始化:使用函数pthread_attr_init(&attr)函数初始化该结构,初始化后,该结构将设置为系统默认的属性值。
销毁: pthread_attr_destory(&attr),在调用create函数创建好线程后,就可以调用销毁函数,销毁属性结构体。
线程的属性包含:
detachstate
设置线程为分离状态的方法有两种:第一种就是上面所说的通过改变线程属性,但这种方法感觉太麻烦,常用的就是第二种方法,使用函数pthread_detach(pthread_id)函数使线程分离。
guardsize 设置避免栈溢出的警戒缓冲区
stacksize 改变栈的默认大小
二、同步属性
1、互斥量属性
结构体:pthread_mutexattr_init attr
初始化和销毁函数:
互斥量属性包含:进程共享属性和类型属性。
进程共享属性:
线程的私有数据
为什么要引入线程的私有数据?
1、保护线程的数据,防止与其他线程混淆
2、如:线程设置自己的error值,并不会影响其他线程设置自己的error值
同一进程中的线程共享进程中的所有数据,那么如何实现私有数据呢? 使用键与私有数据进行关联
使用函数创建键:
创建的键存放在keyp指向的内存单元,第二个参数为析构函数,线程正常退出时,会调用,非正常退出时(exit,_exit, _Exit、abort),不会调用。如果线程私用数据使用malloc分配了内存空间,就需要制定析构函数,释放内存。
取消选项
即该属性决定响应pthread_cancel函数时所呈现的行为。
可取消:PTHREAD_CANCEL_ENABLE
不可取消:PTHREAD_CANCEL_DISABLE
通过函数设定: