第11章執行緒總結

2022-09-17 06:30:08 字數 2742 閱讀 3739

1 執行緒標識

pthread_t型別

int

pthread_equal(pthread_t tid1,pthread_t tid2)

pthread_t pthread_self()

2 建立執行緒

int pthread_create(pthread_t *tid,pthread_attr_t *attr,void *(*start_rtn)(void *),void *arg)

tid儲存執行緒id,attr描述執行緒屬性,start_rtn為執行緒起始函式(引數和返回值都是void *),arg是傳遞給起始函式的引數 

新建立執行緒和呼叫執行緒的執行順序是不確定的,新建立執行緒繼承呼叫執行緒的訊號遮蔽字,但是清除未決訊號

3 終止執行緒

三種方式:

1)從啟動例程返回 return

2)被其他執行緒取消pthread_cancel

int pthread_cancel(pthread_t tid)

3)呼叫pthread_exit

void pthread_exit(void *rval)

rval可以被其他執行緒通過pthread_join捕捉到:

int pthread_join(pthread_t tid,void **rval)

呼叫執行緒將等待tid執行緒終止,並試圖獲取其返回碼(終止碼)

清理函式:

void pthread_cleanup_push(void (*rtn)(void *),void *arg)

void pthread_cleanup_pop(int execute)

4 執行緒同步

1)互斥量

互斥量:pthread_mutex_t

int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutexattr_t *attr)

int pthread_mutex_destroy(pthread_mutex_t *mutex)

int pthread_mutex_lock(pthread_mutex_t *mutex)

int pthread_mutex_unlock(pthread_mutex_t *mutex)

int pthread_mutex_trylock(pthread_mutex_t *mutex)

2)讀寫鎖

與互斥量的區別在於:多執行緒共享讀鎖,獨佔寫鎖

讀寫鎖:pthread_rwlock_t

int pthread_rwlock_init(pthread_rwlock_t *rwlock,pthread_rwlockattr_t *attr)

int pthread_rwlock_destroy(pthread_rwlock_t *rwlock)

int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock)

int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock)

int pthread_rwlock_unlock(pthread_rwlock_t *rwlock)

int pthread_rwlock_tyrrdlock(pthread_rwlock_t *rwlock)

int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock)

3)條件變數  

條件變數提供了執行緒會合的場所,允許執行緒以無競爭的方式等待某個條件的發生

條件變數受互斥量保護,獲取互斥量的執行緒a可以呼叫pthread_cond_wait(&cond,&mutex)

a執行緒被放到條件變數的執行緒列表上,對互斥量解鎖,進入休眠狀態等待條件發生

其他執行緒獲取互斥量,一定條件下呼叫pthread_cond_signal(&cond)或pthread_cond_broadcast(&cond)函式,然後釋放互斥量

a執行緒pthread_cond_wait函式返回,並重新獲取互斥量

條件變數:pthread_cond_t

int pthread_cond_init(pthread_cond_t *cond,pthread_condattr_t *attr)

int pthread_cond_destroy(pthread_cond_t *cond)

int pthread_cond_wait(ptherad_cond_t *cond,pthread_mutex_t *mutex)

int pthread_cond_timedwait(pthread_cond_t *cond,pthread_mutex_t *mutex,struct timespec *timeout)

int pthread_cond_signal(pthread_cond_t *cond)

int pthread_cond_braodcase(pthread_cond_t *cond)

獲取互斥量的執行緒通過呼叫pthread_cond_wait、pthread_cond_timedwait函式,將執行緒放到等待條件的執行緒列表上,釋放互斥量並休眠等待

之後獲取互斥量的執行緒可以在條件發生時呼叫pthread_cond_signal、pthread_cond_broadcast函式,當執行緒釋放互斥量時,等待條件的執行緒列表上的執行緒可以從pthread_cond_wait函式返回並重新獲取互斥量

第11章 執行緒

執行緒標識 就像每個程序有乙個程序id一樣,每個執行緒也有乙個執行緒id。程序id在整個系統中是唯一的,但執行緒id不同,執行緒id只有在它所屬的程序上下文中才有意義。程序id 用pid t資料型別表示 執行緒id用pthread t資料型別來表示 includeint pthread equal ...

第11章 執行緒

1.執行緒的作用 1 對於程式設計而言 當我們的乙個程序在某一時刻,需要做的事件不止一件的時候,一般有兩種方法。一種是採用非同步程式設計的模式,一種是採用多執行緒同步模式。但是多執行緒同步模式遠遠比非同步模式要方便的多。但是對於單核系統,往往非同步程式設計模式效率更高。2 對於互動程式,一般都是要多...

PMP 第11章錯題總結

1.專案經理考慮每個人的觀點並恢復秩序是合作 解決問題的技術 2.評價團隊有效性的指標包括 個人技能的改進 團隊能力的改進 團隊成員離職率的降低 團隊凝聚力的加強 3.管理質量包括所有質量保證活動,還與產品設計和過程改進有關 4.誰負責做什麼事,具體的人與工作相關聯的那就是責任分配矩陣,raci矩陣...