C 關於程序與執行緒 三

2021-06-27 03:20:01 字數 1728 閱讀 7604

一、建立多執行緒應用程式

執行緒,也被稱為輕量程序,指執行中程式的排程單位。目前大部分平台都支援多執行緒,允許程式中存在多個執行緒。在windows作業系統的任務管理器中就可以檢視執行緒,把選擇列對話方塊的執行緒計數選上即能顯示每個程序的執行緒數。

在本節的例項中,建立了乙個最簡單的多執行緒應用程式。在c#應用程式中,執行緒由thread類表示,位於system.threading命名空間下。執行緒的啟動由thread類的start方法實現。執行緒的建構函式中一般是乙個方法名,啟動該執行緒即等於啟動了該方法。

using system.threading;

class program

//////主函式

///

static void main(string[ ] args)

//定義乙個執行緒變數t,建構函式中使用的引數是乙個方法名

thread t=new thread(writehi);

t.start();//啟動該執行緒

//迴圈輸出"hello"字串

while(true)

console.write("hello");

//////迴圈輸出"hi"

///

static void writehi()

while(true)

console.write("hi");

程式執行結果為類似hi hi hi hi...........hello hello hello...........hi hi hi.........^c請按任意鍵繼續

由於程式中沒有設定結束迴圈的條件,因此必須通過按下"ctrl+c"組合鍵終止程式。從本程式的輸出結果可以看出,執行緒的執行方式是分時的,即每個執行緒輪流占有cpu,因此兩個執行緒的輸出時順序進行的。

二、向執行緒傳遞引數

除了直接啟動執行緒外,還可以在啟動執行緒的時候向執行緒傳遞引數。這樣,一些有引數的方法也可以進行多執行緒的應用。在c#中,要使用向執行緒傳遞引數的方式建立並啟動執行緒,則該引數必須是乙個object型別,需要進行裝箱和拆箱操作。

本節介紹如何在c#中向執行緒傳遞引數:

using system.threading;

class program

//////主函式

///

static void main(string[ ] args)

//定義乙個執行緒變數t,建構函式中使用的引數是乙個方法名

thread t=new thread(sayhello);

//在啟動執行緒的方法中加入乙個引數,該引數即sayhello方法使用的引數

t.start(true);

//以正常方式呼叫的sayhello方法

sayhello(false);

//////輸出函式

///

///判別輸出方式

static void sayhello(object  ishello)

//首先將object型引數轉換為bool型引數

bool  hello=(bool)ishello;

//判斷,true則輸出hello,否則輸出hi

if(hello)

console.writeline("hello");//輸出hello

else

console.writeline("hi");//輸出hi

結果為:

hello

hi請按任意鍵繼續。。。。

從結果中可以看到,程式正確地識別了傳遞到sayhello方法中的引數。

實驗三 程序與執行緒

一 實驗名稱 實驗三 程序與執行緒 二 實驗日期 2014 3 13 三 實驗目的 1.linux程序 2.簡單的程序同步 四 實驗的步驟和方法 實驗1 linux程序家族樹 檔名3 1 1.c 看程式寫結果。要求 增加1個fork 2個fork 多個fork 的結果會怎樣?並說明原因,找出規律。增...

執行緒與程序 執行緒三把鎖

學習三把鎖時候我們需要先知道為什麼要有三把鎖 全域性資源 counter 被搶占的情況,問題產生的原因就是沒有控制多個執行緒對同一資源的訪問,對資料造成破壞,使得執行緒執行的結果不可預期。這種現象稱為 執行緒不安全 在開發過程中我們必須要避免這種情況,那怎麼避免?這就用到了我們在綜述中提到的互斥鎖了...

關於多程序與多執行緒

首先,要實現多工,通常我們會設計master worker模式,master負責分配任務,worker負責執行任務,因此,多工環境下,通常是乙個master,多個worker。如果用多程序實現master worker,主程序就是master,其他程序就是worker。如果用多執行緒實現master...