之前我們使用lock快捷方式,實現了多執行緒對同一資源的共享。在c#中lock實際上是monitor操作的簡化版本。
下面使用monitor來完成之前的lock功能,你可以在此做一下對照:
private static void multithreadsynergicwithmonitor()work count:。--", thread.currentthread.name, count, array[0], array[1], array[2]));
monitor.exit(array);}})
;thread customer = new thread(() =>
work count:。--", thread.currentthread.name, count, array[0], array[1], array[2]));
array[0] = 0;
array[1] = 0;
array[2] = 0;
monitor.exit(array);}})
;producer.start();
customer.start();
}
通過對比聰明的你可定發現,lock(xx)等效於 monitor.enter(x'x)與monitor.exit(xx)的組合,實際上lock就是monitor的語法糖。
因此monitor比lock在控制線程協作方面更為 強大,如下:
/// /// 多執行緒協作-monitor方式/// 成功解決多執行緒對單一資源的共享
/// 並解決多個執行緒間同步問題
///
private static void multithreadsynergicwithmonitor()
work count:。--", thread.currentthread.name, count, array[0], array[1], array[2]));
monitor.pulse(array);
monitor.wait(array);
}monitor.exit(array);});
thread customer = new thread(() =>
work count:。--", thread.currentthread.name, count, array[0], array[1], array[2]));
array[0] = 0;
array[1] = 0;
array[2] = 0;
monitor.pulse(array);
monitor.wait(array);
}monitor.exit(array);});
producer.start();
customer.start();
}
上面的**與之前的lock**功能類似但卻不相同,它實現了producer執行緒與customer執行緒的交替執行(與lock方式相比控制更加精細),再次建議你執行一下實際**,你會很容易發現兩者卻別。
說明:
1、monitor.pulse(xx)實現通知等待xx資源的某乙個執行緒由等待狀態(等待佇列)變更為就緒狀態(就緒佇列),從而做好準備在呼叫monitor.pulse(x'x)功能的執行緒釋放資源時馬上鎖定釋放的資源。
2、monitor.wait(xx)實現呼叫該方法的執行緒暫時釋放鎖定的資源,並讓該執行緒進入等待執行緒佇列。所以執行緒在呼叫該方法後會臨時中斷後續**的執行,在該執行緒再次獲得資源時,
將回到中斷繼續執行。
3、monitor.pulseall(xx)是monitor.pulse(xx)擴大版,如果你理解了monitor.pulse(xx)並且知道執行緒狀態的變更(執行緒所屬佇列的變化),那麼理解monitor.pulseall就簡單多了。
monitor.pulseall實現將所有等待資源的執行緒由等待狀態變為就緒狀態,接下來如果資源被釋放,所有就緒執行緒將均有機會獲得資源並執行。
C 多執行緒的用法6 執行緒間的協作Mutex
多執行緒協作 mutex private static void multithreadsynergicwithmutex mutex.releasemutex thread thread2 new thread mutex.releasemutex thread1.start thread2.st...
C 多執行緒的用法3 執行緒間的協作Join
在建立多執行緒應用程式時,如何確保執行緒間的協作往往比讓執行緒工作更重要。執行緒間的協作最簡單的方式是採用join來進行,如下 多執行緒協作 join方式 解決執行緒間同步工作問題 private static void multithreadsynergicwithjoin start work ...
C 多執行緒的用法4 執行緒間的協作lock快捷方式
執行緒間協作還可通過lock 加鎖 方式進行,lock屬於c 的monitor語法糖 monitor後續講解 使用簡單快捷,如下 多執行緒協作 lock快捷方式 成功解決多執行緒對單一資源的共享 private static void multithreadsynergicwithlock work...