1. 程式人生 > >程序 和 執行緒 之間的關係

程序 和 執行緒 之間的關係

程序定義:指在系統中能獨立執行並作為資源分配的基本單位,它是由一組機器指令、資料和堆疊等組成的,是一個能獨立執行的活動實體。

執行緒定義:執行緒是程序中的一個實體,作為系統排程和分派的基本單位。我的理解就是:一個程序中可以有多個執行緒。

注意:1.多個程序有獨立的空間

           2.多個執行緒共享一塊空間,一個執行緒銷燬可能導致其他執行緒崩潰

執行緒有三個基本狀態:就緒 執行  阻塞

從就緒到執行:獲得cpu的時間片

從執行到就緒:時間片耗盡

從執行到阻塞:等待io(計算機的輸入輸出介面)操作

從阻塞到執行:不存在

從阻塞到就緒:io操作已經發現或者等待時間耗盡

從就緒到阻塞:不存在

執行緒間通訊:同一程序可用變數通訊

                     不同程序可用訊息通訊

執行緒同步方式:1.原子訪問 2.關鍵段 3.互斥量 4事件 5訊號量

1原子訪問:同一時刻只許一個執行緒訪問資源

關鍵字 volatile 防止編譯優化,對特殊地址的穩定訪問,可直接操作記憶體

2關鍵段(臨界區):同一時刻只許一個執行緒訪問一段程式碼

                                 旋轉鎖:發現關鍵段被佔用後等待一會 

                                 非同步處理:發現關鍵段被佔用,去處理其他事情

3 互斥量:CreateMutex(NULL,FALSE/TRUE,NULL);

                             FALSE: 把鎖讓進去 哪個程序都可以得到

                            TRUE:得到鎖

4 訊號量:CreateSemaphore()四個引數

          引數1:指向結構體的指標 (NULL)

          引數2: 初始化執行緒的數量

          引數3: 最大執行緒的數量

         引數4:跨程序用的name  (NULL)

他們之間的區別:

1.互斥量可以跨程序 關鍵段不可以跨程序

2.互斥量比較安全 可以設定等待時間

3.互斥量的效率較低 關鍵段效率 不需要切換狀態

4 關鍵段 只適用於同一程序  互斥量,事件,訊號量可以跨程序通訊

5 事件和訊號量 適用於多個執行緒一起做任務

補充:

執行緒是程序中的執行單元,輪換時間片的基本單位

執行緒可分為執行緒棧和核心物件兩部分

1.執行緒棧:存放區域性的臨時資源

2.核心物件:可分為計數器 ,掛起計數器, 訊號三部分

注:計數器的預設值是2, 如果執行緒退出 計數器減一 變為1 ,如果關閉控制代碼(操作執行緒的指標),計數器再減一

當計數器為0 時 ,銷燬核心物件

當核心物件被銷燬,執行緒退出,則執行緒棧不存在, 但是關閉控制代碼 執行緒不會退出