線程的學習(一)

線程的初步重點在線程的創建、分離、退出、同步。
線程分離:分離的線程在線程完成後,系統會自動回收他的儲存器資源;不分離的線程,如果不pthread_join或者不結束整個進程,系統不會回收資源。
線程同步:共有互斥量、讀寫鎖、條件變量、自旋鎖、屏障共五種方式。
各種同步,只是提供了一種機制,並不是用了以後就會一定實現同步,仍然需要人爲的控制使用邏輯才能實現同步。

線程退出:1、線程可以簡單的從啓動例程中返回,指return,啓動例程,即線程的執行函數
2、線程可以被同一進程的其他線程取消
3、線程調用pthread_exit

函數名稱

函數功能

說明

pthread_create

創建線程

線程變量:pthread_t

pthread_equal

判斷兩個線程ID是否相等


pthread_self

獲得自身的線程ID


pthread_exit

終止一個線程


pthread_join

等待一個線程

除非指定線程調用pthread_exit、從啓動例程返回或者被取消,否則調用線程將一直阻塞

類似於waitpid的功能

pthread_detach 分離一個線程

pthread_cancel

請求取消一個線程

並不等待線程終止,僅提出請求

pthread_cleanup_push

註冊一個線程退出函數

必須與pthread_cleanup_pop成對出現

pthread_cleanup_pop

調用註冊的線程退出函數

必須與pthread_cleanup_push成對出現

pthread_mutex_init

初始化互斥量

互斥量

變量類型:pthread_mutex_t

pthread_mutex_destory

銷燬互斥量,需要在釋放內存前調用

pthread_mutex_lock

對互斥量進行加鎖,如果已經加鎖則阻塞

pthread_mutex_trylock

嘗試對互斥量進行加鎖,如果已經加鎖,則返回EBUSY

pthread_mutex_unlock

對互斥量進行解鎖

pthread_mutex_timedlock

帶超時的對互斥量的加鎖,時間是絕對時間而非相對時間

pthread_rwlock_init

初始化讀寫鎖

讀寫鎖

變量類型:pthread_rwlock_t

pthread_rwlock_destroy

銷燬讀寫鎖,需要在釋放讀寫鎖佔用的內存之前調用

pthread_rwlock_rdlock

以讀模式進行加鎖

pthread_rwlock_wrlock

以寫模式進行加鎖

pthread_rwlock_unlock

解鎖讀寫鎖

pthread_rwlock_timedrdlock

帶超時的以讀模式加鎖

pthread_rwlock_timedwrlock

帶超時的以寫模式加鎖

pthread_cond_init

初始化條件變量

條件變量

適用於異步等待某個處理結果

變量類型:pthread_cond_t

pthread_cond_destory

對條件變量進行反初始化,需要在釋放條件變量底層的內存空間之前調用

pthread_cond_wait

等待條件變量爲真

pthread_cond_timedwait

帶超時的等待條件變量爲真,時間爲絕對時間

pthread_cond_signal

通知線程條件已經滿足,至少能喚醒一個線程

pthread_cond_broadcast

通知線程條件已經滿足,喚醒所有等待該條件的線程

pthread_spin_init

對自旋鎖進行初始化

自旋鎖

與互斥量類似,但不是通過休眠使進程阻塞,而是在獲取之前一直在忙等(自旋)。在等待自旋鎖可用之前,CPU不能做其他的事情

變量類型:pthread_spinlock_t

pthread_spin_destory

對自旋鎖進行反初始化

pthread_spin_lock

獲取自旋鎖,獲取成功之前一直在自旋

pthread_spin_trylock

獲取自旋鎖,如果不能成功,立即返回EBUSY

pthread_spin_unlock

解鎖自旋鎖

pthread_barrier_init

初始化屏障

屏障

當阻塞線程達到設定值,則所有阻塞線程均被喚醒

變量類型:pthread_barrier_t

pthread_barrier_destroy

對屏障進行反初始化

pthread_barrier_wait

線程等待,表明線程已經完成工作,準備等待其他線程趕上來




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