假設我共享double
變量。線程A
每秒更新數千次。在另一個線程B
我想每次發生這種情況時都會收到有關「更新」的通知。無鎖技術通過從一個線程到另一個線程的雙重更新
我想完全避免的通知,只是使用while(true)
循環,但這種引進顯著放緩到我的程序lock-free calc: how to sum N double numbers that are changing by other threads?的可能,因爲「同時你繼續加載,從內存一遍又一遍這同一陣列是不是表現確實不錯因爲內存帶寬有限。「
我也試過使用Monitor
類,但它也很慢,我已經看到長達1-2毫秒的延遲,當Monitor.TryEnter
返回false
。
我現在認爲我需要使用無鎖技術進行通知,可能使用SpinLock
或其他東西?
之間,通知我喜歡,但問題是AutoResetEvent'多少開銷'介紹。 – javapowered 2012-07-09 13:31:57
我沒有測試這個。您可以測試1000個迭代的代碼塊並檢查執行這些迭代所需的時間,然後使用鎖檢查相同的迭代。那麼你可以知道結果。 – Waqar 2012-07-09 14:37:38