
第七章
執行緒
執行緒
(
threading
)就是在單一行程(process)中進行多個執行單位(units of
execution)的建立及管理。由於資料爭用(data race)及死結(deadlock)等情況,執
行緒常是導致程式設計發生錯誤的源頭。執行緒不用一本書的篇幅是說不清楚的,而且
的確有此需要。此類書籍往往會把焦點擺在特定執行緒程式庫的無數介面上。雖然我們
將會探討 Linux 執行緒 API 的基礎知識,但是本章還會提到:執行緒如何成為系統程式
設計者工具箱裡的一項工具?為什麼使用執行緒—而且,更重要的是,為什麼不使用?
哪些設計模式可以協助我們構思及建立使用執行緒的應用程式?最後,資料爭用是什
麼,我們如何加以避免?
二元檔、行程以及執行緒
二元檔
(
binary
)是駐留在儲存媒體處於休眠狀態的程式,被編譯成特定作業系統及機
器架構可以接受的格式,準備執行但尚未行動。
行程
(
process
)是作業系統的抽象概
念,代表行動中的二元檔:載入二元檔、虛擬化記憶體、核心的資源(像是已開啟的檔
案)、相關聯的用戶…等等。
執行緒
(
thread
)是行程中的執行單位:虛擬化處理器、堆
疊以及程式狀態。換句話說,行程是運行中的二元檔,而執行緒是作業系統之行程排班
器(process scheduler)所能安排的最小執行單位。
行程中包含了一或多個執行緒。如果一個行程僅包含一個執行緒,代表行程中只有
一個執行單位,而且同一時間只會發生一件事。我們稱此類行程為
單執行緒
(
single
threaded
)。它們都是典型的 ...