程序包括:
1)私有的虛位址空間;
2)可執行程式(**與資料);
3)開啟系統資源列表控制代碼;
4)安全訪問標誌;
5)程序id;
6)至少有乙個執行執行緒;
執行緒包括:
1)一組cpu暫存器狀態;
2)兩個堆疊(系統態與使用者態);
3)tls(執行緒區域性儲存區);
4)執行緒id;
5)安全特性;
因此程序是不活潑的,它從來不執行任何東西,是執行緒的容器;
執行緒的分類:1)使用者介面執行緒;2)工作執行緒;
一般說來乙個程式是由乙個ui執行緒和多個wor**程組合的,ui執行緒中進行訊息處理(getmessage()),工作執行緒處理業務邏輯;
執行緒函式的宣告:
dword winapi treadfunc(lpvoid);
執行緒的建立:
handle createthread(。。。);
這裡需要注意一點執行緒id與程序id一樣是可重複使用的,具有一定的不可信性,因此最好操作他們時使用核心物件控制代碼;
執行緒的終止:
1)執行緒函式返回;
2)呼叫了exitthread函式;
3)另乙個執行緒呼叫了terminatethread()函式;
4)包含執行緒的程序終止執行;
執行緒返回後要做的一些事情:
始終將執行緒設計成這樣的形式,即當想要執行緒終止執行時,它們就能夠返回;如果執行緒能夠返回,就可以確保下列事項的實現;
1)執行緒函式中建立的所有c++物件均將通過它們的析構函式正確撤銷;
2)os將正確釋放執行緒堆疊使用的記憶體;
3)os將執行緒的退出**設定為執行緒函式的返回值;
4)os將遞減執行緒核心物件的使用計數;
exitthread和terminatethread函式基本在設計良好的程式中都不使用,原因如下:
exitthread不能讓函式中的c++物件正確的撤銷;在ms的vc中可以用vc++執行庫中的_endthreadex替代;
termiantethread
1)他是非同步操作,並不能保證想終止的執行緒已經終止了;
2)執行緒終止時,dll通常接受通知,但改函式強迫執行緒終止,dll不接收通知,這也能阻止適當的清除;
3)另外在擁有被終止執行緒的程序結束前,該執行緒的堆疊不會被釋放;
c/c++執行庫的考慮
createthread與_beginthreadex函式的區別
前者是作業系統的函式,後者是c/c++執行庫函式,如果要使用到c/c++執行庫中的一些執行緒不安全函式需要用_beginthreadex函式替代createthread函式來建立執行緒;
程序和執行緒的控制代碼和偽控制代碼
控制代碼:createprocess和createthread函式返回值
偽控制代碼:getcurrentprocess();getcurrentthread();
注意將偽控制代碼傳入closehandle(..)會忽略並返回false;
將偽控制代碼轉換為實控制代碼:duplicatehandle(...)該函式會遞增特定物件的使用計數,因此完成後應該對該物件進行釋放;
程序與執行緒
程序 process 管理單元,管理分配應用程式的資料,的記憶體空間.執行緒 thread 執行單元,執行緒負責執行乙個預先編排好的 段,執行 棧是基於執行緒的.乙個應用程式啟動的時候,程序自動建立,並且會預設建立主線程,主線程負責執行main 方法.thread t new thread new ...
程序與執行緒
程序 是擁有資源的實體,包括 1。乙個程序有乙個虛擬位址空間,不同程序位於不同的 虛擬位址空間中。程序之間若要通訊,必須通過作業系統 的功能呼叫 ipc 2。程序擁有其他資源,例如開啟的檔案和i o裝置。程序結束時,作業系統會自動釋放該程序擁有的所有資源。例如,如果 open乙個檔案而不close它...
程序與執行緒
1.計算機的核心是cpu,它承擔了所有的計算任務。它就像一座工廠,時刻在執行。2.假定工廠的電力有限,一次只能供給乙個車間使用。也就是說,乙個車間開工的時候,其他車間都必須停工。背後的含義就是,單個cpu一次只能執行乙個任務。3.程序就好比工廠的車間,它代表cpu所能處理的單個任務。任一時刻,cpu...