C 的多執行緒機制初探 7

2021-09-30 03:38:42 字數 971 閱讀 1963

然後在下面這個類monitorsample的main()函式中我們要做的就是建立兩個執行緒分別作為生產者和消費者,

使用cellprod.threadrun()方法和cellcons.threadrun()方法對同乙個cell物件進行操作。

public class monitorsample

catch (threadstateexception e)catch (threadinterruptedexception e)

//儘管main()函式沒有返回值,但下面這條語句可以向父程序返回執行結果

environment.exitcode = result;

}} 

大家可以看到,在上面的例程中,同步是通過等待monitor.pulse()來完成的。

首先生產者生產了乙個值,而同一時刻消費者處於等待狀態,直到收到生產者的「脈衝(pulse)」通知它生產已經完成,此後消費者進入消費狀態,而生產者開始等待消費者完成操作後將呼叫monitor.pulese()發出的「脈衝」。

它的執行結果很簡單:

produce: 1

consume: 1

produce: 2

consume: 2

produce: 3

consume: 3

......

produce: 20

consume: 20

事實上,這個簡單的例子已經幫助我們解決了多執行緒應用程式中可能出現的大問題,只要領悟了解決執行緒間衝突的基本方法,

很容易把它應用到比較複雜的程式中去。

四.小結

這篇文章之所以叫做《c#多執行緒機制初探》是因為它只涉及到多執行緒機制的乙個角落--什麼是執行緒,如何建立和使用執行緒,

怎樣進行執行緒的同步和通訊等等,而沒有講到c#中其它與多執行緒相關的內容如使用執行緒池(threadpool)實現非同步i/o,

使用定時器(timer)定時觸發執行緒等等,對於執行緒的其它典型問題如死鎖和飢餓也沒有明確的解決。

C 的多執行緒機制初探 2

threadtest.cs using system using system.threading namespace threadtest public class catch threadstateexception return 0 這段程式包含兩個類alpha和 在建立執行緒othread時...

C 的多執行緒機制初探 3

在這裡我們要注意的是其它執行緒都是依附於main 函式所在的執行緒的,main 函式是c 程式的入口,起始執行緒可以稱之為主線程,如果所有的前台執行緒都停止了,那麼主線程可以終止,而所有的後台執行緒都將無條件終止。而所有的執行緒雖然在微觀上是序列執行的,但是在巨集觀上你完全可以認為它們在並行執行。讀...

C 的多執行緒機制初探 5

三.執行緒的同步和通訊 生產者和消費者 假設這樣一種情況,兩個執行緒同時維護乙個佇列,如果乙個執行緒對佇列中新增元素,而另外乙個執行緒從佇列中取用元素,那麼我們稱新增元素的執行緒為生產者,稱取用元素的執行緒為消費者。生產者與消費者問題看起來很簡單,但是卻是多執行緒應用中乙個必須解決的問題,它涉及到執...