第十二節 多執行緒程式設計
執行緒是程序內部的一個執行單元,它是CPU排程和分配的基本單元。
多執行緒的意義:
1.提高應用程式的響應速度
2.提高多CPU系統的效率
執行緒與程序的比較
1.執行緒開銷小,切換塊,是一種節儉的多工操作方式
2.執行緒之間的通訊機制更加高效
1.linux的執行緒機制
系統級執行緒和使用者級執行緒是執行緒實現的兩種基本方法:區別在於執行緒的排程者在核心之中還是在核心外部,前者有利於併發使用
多處理器的資源,而後者則更多的考慮了上下文切換的開銷。
2.執行緒的基本操作
執行緒有3種基本狀態:執行、就緒和阻塞。
對應著5種基本操作:建立、阻塞、啟用、排程和終止。
編寫linux系統下的多執行緒程式,需要使用標頭檔案pthread.h,連線時,需要使用庫libpthread.a 。
1.執行緒的建立
pthread_creat
2.執行緒的合併
合併兩個執行緒所使用的函式為pthread_join,它的作用是使一個執行緒等待另一個執行緒結束,將他們合併在一起。
3.執行緒的終止
1.執行緒自身呼叫pthread_exit函式
2.其他執行緒呼叫pthread_cancel函式
3.從主函式返回
4.執行緒所屬的程序中任何執行緒呼叫exit函式導致所有執行緒結束
4.執行緒的屬性
。。。。
3.執行緒的同步
實現執行緒同步的主要方式:互斥量、條件變數、和訊號量
1.互斥量
pthread_mutex_init
pthread_mutex_destroy
pthread_mutex_lock
pthread_mutex_unlock
2.條件變數
而條件變數通過允許執行緒阻塞和等待另一個執行緒傳送訊號的方法彌補了這一不足,它通常和互斥量一起使用。
pthread_cond_init
pthread_cond_destroy
條件變數的等待包括兩種方式:無條件等待pthread_cond_wait和計時等待pthread_cond_timedwait,計時等待是指如果
在給定時刻前條件沒有滿足,則返回TIMEOUT,結束等待。
條件變數的激發也包括兩種方式:
啟用一個等待執行緒pthread_cond_signal和啟用所有等待執行緒pthread_cond_broadcast
3.訊號量
他的初始化和登出函式分別為:sem_init和sem_destroy
函式sem_post用來增加訊號量的值,當有執行緒阻塞在這個訊號量時,呼叫這個函式會啟用其中的一個執行緒,
函式sem_wait用來阻塞當前執行緒直到訊號量的值大於0,解除阻塞後將訊號量的值減1,