2014-07-07 151 views
1

我有我想要的收購(鎖定)函數調用的資源的情況下釋放,但我在回調(不同的線程)信號的過程的結束。 (資源是外部的:基本上,有一定的總線變得繁忙時,我開始並再次是免費的回調。)同步對象在一個線程鎖定,而在另一個

帶鎖/關鍵部分,這是根本不可能的。我也嘗試過互斥,但只能得到異常,可能是因爲我在另一個線程中釋放。

這裏有什麼選擇?

看來,我可以

  1. 創建布爾「手工」同步它們(鎖定訪問揮發性布爾,然後做了一段時間()睡覺的WaitOne代替)
  2. 使用事件單 - 在第三個包裝線程中將所有東西線程化,然後同時管理同步對象

爲了簡單起見,我可能會去布爾。或者最好是運行時提供的任何機制。 回調來自外部庫。

更新:我也剛纔發現的信號,這似乎符合我的需要。我會問任何人,以防有人有更好的主意/別人認爲這有用。

+0

對於你想要做什麼,你能**非常具體嗎?我*懷疑*你想要什麼可以使用'Monitor.Wait'和'Monitor.Pulse' /'Monitor.PulseAll'完成 –

+0

@Marc我想同時請求我的操作的幾個線程同步。我的問題是,操作從我開始請求到回調被調用時。從查看MSDN中的Monitor,我無法調用進入並在2個不同的線程中離開。要使用Pulse,我必須編寫自己管理資源訪問的邏輯。 –

+2

@AndreasReiff聽起來像是你想有一個信號,然後 –

回答

2

一種簡單的方法來解決你的問題是使用AutoResetEvent:你等待它在一個線程,並通知即可解除鎖定的其他線程。

+0

另一個有用的鏈接http://www.albahari.com/threading/part2.aspx#_AutoResetEvent –

+0

@ ken2k我這樣做實際上使異步調用同步:主叫方要求操作並通過一個事件等待回調。但是現在我想同時同步多個請求操作的線程,這是禁止的。 –

+1

@AndreasReiff如果你想同步_several_線程,那麼你應該去一個信號量。 – ken2k

相關問題