我的ASP.NET應用程序提供對各種數據塊的訪問。每個塊可以被一個或多個用戶同時訪問,所以應用程序必須防止衝突。如何最佳地實現鎖定隊列訪問特定部分的數據?
經過很多考慮,我認爲樂觀併發不是這種情況下的最佳解決方案,並且目前將鎖定視爲合適的選項。
我可以很容易地讓所有請求由一個處理一個用SyncLock
如下:
私人共享AccessLock作爲新對象
SyncLock AccessLock ..Do some reading and writing here End Synclock
但是,這極大地限制了可擴展性應用。
所以我想在某種程度上排隊訪問數據的特定部分。例如。一個隊列用於訪問一部分數據,另一個隊列用於訪問另一部分數據。
有沒有一種方法可以自定義同步鎖定,以便爲數據的不同部分使用不同的隊列,而不僅僅是一個隊列?我的意思是它可以讓我手動指定類似「SyncLock(」Group1「)和」SyncLock(「Group2」)。
他們在線程安全的情況下如何同時訪問相同的數據? – usr 2012-01-27 21:47:18
@usr它們可以使用相同的集合,因爲ConcurrentQueue本身就是線程安全的。不過,各個數據元素將由單獨的線程處理。共享數據(線程之間)需要同步。 – 2012-01-27 22:18:38