線程的學習3—線程的控制


一、線程的屬性

創建線程時,可以指定線程的屬性。

結構體: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

通過函數設定:






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章