Reader-Writer 鎖定
更新:2007 年 11 月
ReaderWriterLockSlim 類別可讓多執行緒並行讀取資源,但是需要有一個執行緒等待獨佔的鎖定,以便將它寫入資源中。
您可以在應用程式中使用 ReaderWriterLockSlim,以提供存取共用資源的執行緒之間的合作同步處理。鎖定會發生在 ReaderWriterLockSlim 本身。
如同任何執行緒同步處理機制,您必須確定所有執行緒都不會略過 ReaderWriterLockSlim 提供的鎖定。確定的方法之一,是設計封裝共用資源的類別。此類別會提供存取私用共用資源的成員,以及使用私用 ReaderWriterLockSlim 進行同步處理的成員。如需範例,請參閱 ReaderWriterLockSlim 類別的程式碼範例。ReaderWriterLockSlim 的效率已足夠用來同步處理個別物件。
請將應用程式結構化,讓讀寫作業的時間縮為最短。長時間的寫入作業會直接影響處理量,因為寫入鎖定是獨佔的。長時間的讀取作業則會封鎖等待的寫入器,如果有至少一個執行緒等待寫入存取,則需要讀取存取的執行緒也會被封鎖。
注意事項: |
---|
.NET Framework 有兩個讀取器-寫入器鎖定:ReaderWriterLockSlim 和 ReaderWriterLock。建議所有新的開發作業都使用 ReaderWriterLockSlim。ReaderWriterLockSlim 類似於 ReaderWriterLock,但它的遞迴和鎖定狀態升降級規則要簡化許多。ReaderWriterLockSlim 可避免許多可能發生死結 (Deadlock) 的情況。此外,ReaderWriterLockSlim 的效能要比 ReaderWriterLock 好許多。 |