首先,上個多執行緒的概念。通過單獨的執行緒來執行某個任務,乙個多執行緒程式可以執行多個任務,而且這些執行緒都是並行執行,同時執行多個執行緒的能力稱為多執行緒。
在c#裡面,.net framework為我們提供了多執行緒的實現。微軟的msdn文件,也給出了例項。見 msdn thread類說明
下面上一段**,看一下c#中如何實現多執行緒。
我們在控制台專案中,鍵入如下**:
main函式中定義了3個執行緒的執行緒陣列,然後迴圈呼叫。
static void main(string args)這是乙個普通的方法,用於測試執行緒的執**況。; for (int i = 0; i < test.length; i++)
}
public class testthread我們發現在actionmethod方法中,lock(this)這一行被注釋掉了。} }
}
我們看一下執行狀況。
這是沒加lock(this)的運**況 這是加了lock(this)的運**況
很顯然,lock將每乙個執行緒物件鎖住,直到該物件釋放為止。我們看看官方的解釋:lock
確保當乙個執行緒位於**的臨界區時,另乙個執行緒不進入臨界區。如果其他執行緒試圖進入鎖定的**,則它將一直等待(即被阻止),直到該物件被釋放。見 msdn lock
這就引出了乙個執行緒同步的概念。也就是說,我們在程式中想辦法,對多個執行緒的執行進行協調,使執行緒按照順序來執行。執行緒同步的意思並不是說多個執行緒保持同樣的次序輸出,而是說單獨的執行緒執行不被其他執行緒所干擾,要執行下乙個執行緒必須等待該執行緒結束才能進行。這樣才能保證多個執行緒輸出的一致和同步。
說到這裡,我想有人想問,多個執行緒同時執行,我怎麼去對他們執行的優先順序進行控制呢?比如,我想讓執行緒1的活先幹完,然後讓執行緒2的活幹完,最後是執行緒3的活幹完。
這是很自然的需求,c#很方便的進行了實現。
test[0].priority = threadpriority.highest;//優先順序最高關於優先順序列舉,可參見msdn threadprioritytest[1].priority = threadpriority.lowest;//優先順序最低
test[2].priority = threadpriority.normal;//優先順序正常
最後,我們將做乙個累加器,用多執行緒來實現。
首先我們畫乙個winform介面
然後我們再開始計算按鈕下面輸入如下**(這裡的控制項名沒改,讀者自行修改):
this.textbox4.text = "0";listbox1.items.clear();
int threadnumber = convert.toint32(this.textbox3.text);
for (int i = 1; i <= threadnumber; i++)
private void add()add方法是乙個核心方法,將需要計算的範圍按照執行緒數進行分割,這樣讓每個執行緒獨自的完成自己的任務,而不是乙個執行緒從頭跑到尾。ok,我們檢視一下執行效果圖:lock (this)
datetime endtime = datetime.now;
timespan timespan = endtime - begintime;
string message = "執行緒" + thread.currentthread.name + ":" + beginvalue.tostring() + "到" + endvalue.tostring() + ", 耗時:" + timespan.totalmilliseconds.tostring() + "毫秒";
this.listbox1.items.add(message);
thread.currentthread.abort();
}
這裡可以看到每個執行緒的運**況和執**況。
C 多執行緒的實現
支援多執行緒可謂是c 語言最大的變化之一.此前,c 只能利用作業系統的功能 unix族系統使用pthreads庫 或是例如openmp和mpi這些 庫,來實現多核計算的目標.c 本身並沒有提供任何多執行緒機制,但是在windows下,我們可以呼叫sdk win32 api來編寫多執行緒的程式,下面是...
C 實現多執行緒
include include include std mutex display mutex 使用互斥鎖 void foo int i void multithread for int i 0 i 4 i std thread thread foo,i thread.detach 執行緒資源 分離...
c 實現多執行緒同步
執行緒同步是指同一程序中的多個執行緒互相協調工作從而達到一致性。之所以需要執行緒同步,是因為多個執行緒同時對乙個資料物件進行修改操作時,可能會對資料造成破壞,下面是多個執行緒同時修改同一資料造成破壞的例子 1 include 2 include 3 4void fun 1 unsigned int ...