一、線程的屬性
創建線程時,可以指定線程的屬性。
結構體: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
通過函數設定: