[英]C# locking in one thread, calling to releasing in another thread
我的場景:
BackgroundWorkers
來執行各種功能。 我正在使用Monitor.TryEnter
:當它為真時做這個特殊的工作(鎖定成功); 當它為假時,將等待鎖被釋放。
問題是這項特殊工作是異步完成的。 我有一個監聽器,會調用CompletedSpecialWork
方法,但 Thread 與執行Monitor.TryEnter
的 Thread 不同(即持有(鎖定)對象的 Thread)。 我需要一種方法來向原始線程發送消息,要求釋放對象。
我試圖擁有SynchronizationContext
的靜態對象,但是當我執行threadHoldingLock = SynchronizationContext.Current
它為空(它是從能夠保持鎖定的 BackgroundWorker 調用的)。
我的問題是:從這個CompletedSpecialWork
上下文/線程,我如何向原始線程(持有鎖)發送請求以通過Monitor.Exit
釋放鎖? 我需要一種將 Invoke 發送到帶有 Monitor.Exit 的原始線程的方法。
就其本質而言,像互斥鎖這樣的同步對象需要從獲得鎖定它們的同一個線程中釋放。 如果這個要求不存在並且您的所有線程可以隨機釋放所有線程的所有鎖,那么它幾乎會使任何類型的同步成為一個崩潰的事件。
您應該查看 Event 對象以在線程之間發出簡單的脈沖信號。
嘗試使用 ManualResetEvent 或 AutoResetEvent。
這些可用於阻塞一個線程,然后(通過從正在運行的線程到被阻塞線程的函數調用)允許重置該阻塞。
它們是信號量之上的語法糖,但我喜歡簡化的界面。 祝你好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.