Win32多執行緒程式設計 一

2022-09-18 05:06:28 字數 1246 閱讀 3557

1.程序

從win32的角度來看,程序就是一大堆物件的擁有權的集合,程序擁有的物件包括記憶體和資源兩類

程序擁有的記憶體:

被程序擁有的記憶體可以分為以下三個型別

1)      code

code是程式的可執行部分,一定是唯讀性質

2)      data

data是程式中的所有變數(不包括函式中的區域性變數),可以分為全域性變數和靜態變數兩種

3)      stack

每個執行緒產生時配有乙個堆疊,呼叫函式是也會分配乙個堆疊,stack中存放著區域性變數

注:這些記憶體對程序中的所有執行緒都是可用的,這在多執行緒中帶來了很大的方便,同時也帶來很大的災難

程序擁有的資源:

程序擁有的資源包括以下幾類

1)      核心物件

如執行緒即檔案控制代碼

2)      user資源

如對話方塊和字串

3)      gdi資源

如device context和畫刷

程序就像一本活頁筆記本,你可以在其中的活頁上寫東西,也可以擦掉內容或整頁撕掉,活頁筆記本只是持有那些東西而已,同理,程序本身並不能夠執行,它只是提供乙個安置記憶體和執行緒的地方。

注:執行緒是程序擁有的乙個物件

2.執行緒

程序和記憶體並沒有真正的做事情,一旦cpu開始執行**,就有了乙個執行緒

注:我對程序和執行緒的理解是這樣的:

程序類似乙個大的房間,房間裡有書櫃,飲水機,桌子,椅子,電腦及人等,房間是乙個容器,擁有著上述各種物件,對房間來說,上述物件沒什麼本質的區別,只是類別不同而已,

執行緒類似於房間中的人,可以利用房間中的其他物件執行任務,如乙個人拿著杯子去飲水機接水,對程序來說,執行緒只是他擁有的乙個物件,也許比較特殊一點而已

真正執行任務的是人,人利用程序中的其他資源執行某一項任務,更進一步說,房間裡可以有多個人,當多個人都要接水時,就涉及到飲水機的互斥訪問了,當多個人需要合作完成某項任務了,如一起打dota,那麼就需要利用房間裡的一些資源如電腦,進行通訊了

更進一步來說,當房間裡乙個人出去了,那對房間來說,只不過出去乙個人,對程序來說,失去了乙個執行緒或失去了乙個物件,只不過這個物件有點特殊,可以稱之為核心物件,同樣,當房間裡搬出一張桌子,也是失去了乙個物件。

這樣很多問題就一目了然了,如為什麼不使用多個程序,原因很簡單,如果我們要接一杯水,我們會重新蓋個房間呢,還是在已有的房間裡派個人呢?學究一些的話,原因如下

1)  增加乙個執行緒的開銷更少

2)利用已有的程序中的資源使資源的利用率更高 

win32多執行緒程式設計

使用3個執行緒完成6個任務,工作的執行是靠呼叫sleep 來模擬,時間長度是隨機給予的,只要乙個執行緒結束,就會有另乙個執行緒被產生。taskques.cpp 定義控制台應用程式的入口點。include stdafx.h include include include define win32 le...

Win32 多執行緒程式設計

程序和執行緒都是作業系統的概念 程序是應用程式的執行例項 每個程序是由私有的虛擬位址空間 資料和其它各種系統資源組成 程序在執行過程中建立的資源隨著程序的終止而被銷毀 所使用的系統資源在程序終止時被釋放或關閉 執行緒是程序內部的乙個執行單元 系統建立好程序後 實際上就啟動執行了該程序的主執行執行緒 ...

Win32多執行緒程式設計 序

程式是乏味的代言人,程式世界是如此的單調,上帝說,讓世界變的精彩,從此有了多執行緒程式設計 從第一台計算機出現開始,順序程式設計就開始深入人心,將任務劃分為乙個流程,交給計算機去做,一切都那麼理所當然,程式世界就像乙個黑白的世界,井然有序卻又單調乏味,多執行緒多工程式設計理念的提出,讓程式世界開始變...