NO IMAGE

一、多執行緒優點

1.通常啟動一個程序,要為該程序分配獨立的地址空間,建立多個資料表來維護程序的程式碼段、堆疊段和資料段,比較耗費系統資源。一個程序建立多執行緒可以使用相同的地址空間,共享大部分資料,啟動一個執行緒所花費的空間遠遠小於程序所需空間,而且啟動執行緒花費的時間也比程序花費時間少很多。

2.執行緒間通訊方便,以為執行緒之間具有共同的地址空間,共享大部分資料資源

3.提高應用響應速度,將耗時工作放在非UI執行緒中處理

4.使多CPU系統更加有效,多執行緒可在不同的CPU上執行

5.改善程式設計結構,易於理解和閱讀

二、執行緒同步的方式

1.互斥量

linux實現方式:

pthread_mutex_t mutex; 建立互斥量

pthread_mutex_init 初始化互斥量,初始化時可設定不同的互斥量屬性,來區分互斥量是用於執行緒間還是程序間

pthread_mutex_lock 申請互斥量

pthread_mutex_unlock 釋放互斥量

2.條件變數

linux實現方式:

pthread_cond_t cond; 定義條件變數

pthread_cond_init 初始化條件變數,初始化時可設定條件變數的屬性結構,區分條件變數用於執行緒間還是程序間,通常用於執行緒間

pthread_cond_wait 使執行緒阻塞在條件變數上,需與互斥量結合使用

pthread_cond_signal/pthread_cond_broadcast 喚醒執行緒

3.訊號量

訊號量本質是一個非負整數,用來控制對公共資源的訪問。

linux實現方式:

sem_t sem; 定義訊號量

sem_init 初始化訊號量,同時可設定訊號量用於執行緒間還是程序間

sem_post  增加資源數量

sem_wait/sem_trywait 獲取資源,前者阻塞式,後者非阻塞式

sem_destroy  釋放訊號量

4.臨界區

windows下同步方式,同步速度比較快,但是隻能同步同一程序下的多執行緒

5.事件