1. windows為什麼支援執行緒?早期的windows系統是沒有」執行緒「概念的,整個系統只能執行著乙個執行執行緒,這可能阻塞其他任務的執行,帶來極其差的使用者體驗,基於上述及其作業系統的健壯性,可靠性等,windows引入了「執行緒」的概念。 執行緒可以看作是對cpu的虛擬。ndows為什麼支援執行緒2. 執行緒開銷
3. 執行緒排程和執行緒優先順序
4. 前台執行緒和後台執行緒
5. 執行緒的hello world程式
雖然多執行緒技術能夠在一定程度上增加使用者 互動體驗,但是作業系統建立執行緒並不是沒有代價的,具體來講:
2.1 windows核心需要建立「執行緒核心物件」,執行緒核心物件中包含作業系統需要掌握執行緒的基本資訊
2.2 執行緒環境塊teb,teb中包含執行緒異常處理鏈首,執行緒本地儲存資料等資訊
2.3 使用者模式棧
2.4 核心模式棧,應用程式向作業系統的核心模式函式傳遞引數時,windows將使用者模式下的引數複製到核心棧中。
2.5 dll attach和dll detach通知,windows載入dll時,將會發出dll_thread_attach通知,dll解除安裝時發出dll_thread_detach命令,如果乙個 應用程式需要載入大量的dll的話,顯然對效能的影響是比較大的。
在windows上執行的執行緒在執行了一定時間(乙個時間片)後,windows將會進行「排程」,windows按照優先順序的高低選擇程式開始執行,也就是說如果存在乙個優先順序是22的執行緒能夠執行,那麼windows將不會呼叫優先順序為21的執行緒。但是windows是一種「搶占式」的作業系統(在windows上執行的執行緒能夠在任何時候被搶占),如果乙個具有較高優先順序的執行緒準備好執行,並且當前執行的是較低優先順序的執行緒,windows將迫使較低優先順序執行緒停止執行,開始執行較高優先順序的執行緒。
由於windows上線程呼叫是(籠統的講)通過執行緒的優先順序來實現的,那麼如果我們想使我們的程式能夠被盡量多的排程,就需要設定執行緒的優先順序,windows的優先順序是使用數字表示的,在c#中將其抽象為threadpriority列舉型別:
[serializable]
[comvisible(true)]
public enum threadpriority
通過執行緒池建立的執行緒預設是後台執行緒,通過thread t = new thread(dowork);形式建立的執行緒預設是前台執行緒,除非使用isbackground設定成false。下面是乙個測試**:
class program
private static void dowork()
c#中通過system.threading.thread建立乙個執行緒是比較簡單的,thread的常用建構函式:
public thread(parameterizedthreadstart start); // 建立執行緒,並向執行緒中傳遞引數
public thread(threadstart start); // 建立執行緒,但是無法向啟動的執行緒中傳遞引數,主要是threadstart委託定義的原因
public delegate void threadstart();
建立了乙個thread物件之後,呼叫start方法開始啟動執行緒。
public void start();
完成**如下:
class program
private static void dowork()
Linux多執行緒程式設計之基礎篇
1.多執行緒基礎 mutual exclusion lock 互斥鎖 用來鎖定和解除鎖定對共享資料訪問的函式。condition variable 條件變數 用來阻塞執行緒直到狀態發生變化的函式。read write lock讀寫鎖 可用於對共享資料進行多次唯讀訪問的函式,但是要修改共享資料則必須以...
多執行緒程式設計 之 入門篇
自己第一次涉及c語言的多執行緒程式設計,實屬入門了解級別的 之前只做過j a的runnable的多執行緒程式設計。本次我們可以把螢幕看成是乙個資源,這個資源被兩個執行緒所共用,include include using namespace std dword winapi fun lpvoid lp...
多執行緒程式設計之執行緒取消
關鍵 pthread cancel函式傳送 終止訊號 pthread setcancelstate函式 設定終止方式 pthread testcancel函式取消執行緒 另一功能是 設定取消點 1 執行緒取消的定義 一般情況下,執行緒在其主體函式退出的時候會自動終止,但同時也可以因為接收到另乙個執行...