C 系統相關 簡單的多執行緒程式設計

2021-05-25 06:28:26 字數 1657 閱讀 9276

#include //『注意1』由於createthread()是api函式,所以,必須包含這個標頭檔案

#include

using namespace std;

dword winapi thread1proc( lpvoid lpparameter); //執行緒的執行函式

dword winapi thread2proc( lpvoid lpparameter); //執行緒的執行函式

int a;

int b;

int c;

int temp(0);

int sum(0);

int main()

dword winapi thread1proc( lpvoid lpparameter)

dword winapi thread2proc( lpvoid lpparameter)

**說明:本**簡單演示了多執行緒的建立方法。程式用包括主線程在內的三個執行緒共同完成sum=a+b+c並輸出計算結果的功能。其中,執行緒1完成a+b這一步,執行緒2完成將a+b的結果與c相加這一步,主線程完成輸出計算結果這一步。整個程式很簡單,一目了然,但是,依然有幾個地方需要注意:

『注意1』由於建立執行緒所使用的函式createthread()是windows api函式,所以,必須包含標頭檔案windows.h

『注意2』createthread()函式有乙個handle 型別的返回值,用來標識建立的執行緒,因此,應該定義乙個handle型別的變數用於儲存這個控制代碼(不是必須)。執行緒建立完成之後,如果不需要使用這個控制代碼變數,應當將其關閉,以釋放系統資源。關閉控制代碼的方法是呼叫closehandle()函式。

『注意3』這裡的sleep()函式的作用是使主線程放棄執行機會,讓其它執行緒開始執行。

因為這個程式主線程內執行的**很短,就兩條短語句,同常情況,這兩條語句在乙個系統時間片內就能跑完,然後就執行return語句返回,主線程就執行結束了。

主線程一結束,程式就終止,執行緒1和執行緒2將再也得不到執行機會。

我們可以將sleep()注釋起來,然後執行程式,觀察列印出來的sum值即可以發現執行緒1和執行緒2是否得到執行機會。

當然,sleep()不是必須的,這從系統排程執行緒的方式可以看出來,多執行緒程式在開始執行時,系統會首先讓主線程執行一段時間(時間片),如果主線程在這個時間段內將所有**都執行完了,程式就結束,否則,就將主線程掛起,然後讓其他執行緒執行同樣的一段時間,時間到了之後,該執行緒掛起,又返回主線程開始執行,主線程再執行同樣的一段時間,然後再掛起,跳到其他執行緒執行,如此不斷迴圈,直到主線程完全執行完畢為止。

由此可見,要想讓非主線程能夠被完整執行,那麼只要使它獲得的時間片的總和大於或等於該執行緒連續執行完畢所需要的時間即可。

基於此原理,我們想到,只要讓主線程被多次掛起即可使非主線程獲得多個執行時間片。那麼,如何讓主線程多次被掛起呢?很簡單,只要讓主線程連續執行完畢所需要的時間是系統時間片的n倍即可,具體n等於多少合適,那需要視其他執行緒完整執行需要多少時間。我們實驗一下,把呼叫sleep()那行**注釋起來,然後在那裡寫上如下**:

//sleep(5);

for(int i=0;i<1000000;i++){}

這個for迴圈什麼事也不做,就是延長主線程的執行時間,使主線程在乙個時間片裡執行不完,分成在若干個時間片裡執行。執行程式,可以發現,輸出的sum值等於6,符合預期,說明,執行緒1和執行緒2都得到了執行。

參考資料:

C 多執行緒程式設計簡單例項

using system using system.collections using system.collections.generic using system.threading 在開發中經常會遇到執行緒的例子,如果某個後台操作比較費時間,我們就可以啟動乙個執行緒去執行那個費時的操作,同時程...

C 多執行緒的乙個簡單應用(C 多執行緒相關)

開的執行緒要放在主線程邏輯前否則並不會利用好主線程資源 用join來等待執行緒結束 可以通過mainthreadid std this thread get id 來獲取主函式id,通過auto id s.get id 來獲取子執行緒id,判斷兩個id來確定自己當前函式是執行在主線程還是分執行緒 f...

多執行緒程式設計相關概念

很多同學都聽說過,現代作業系統比如mac os x,unix,linux,windows等,都是支援 多工 的作業系統。什麼叫 多工 呢?簡單地說,就是作業系統可以同時執行多個任務。打個比方,你一邊在用瀏覽器上網,一邊在聽 一邊在用word趕作業,這就是多工,至少同時有3個任務正在執行。還有很多任務...