一、建立多執行緒應用程式
執行緒,也被稱為輕量程序,指執行中程式的排程單位。目前大部分平台都支援多執行緒,允許程式中存在多個執行緒。在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...