C 多執行緒的用法5 執行緒間的協作Monitor

2022-04-04 11:27:37 字數 2040 閱讀 1484

之前我們使用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...