程序與執行緒

2021-04-07 06:19:26 字數 1537 閱讀 1216

程序包括:

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...