2009-10-29 52 views
1

經過數小時的追蹤神祕的持續一秒鐘或兩秒鐘的「凍結」我終於發現它的ReaderWriterLock(-1)。它是服務器應用程序,此處的鎖定用於寫入客戶端集合。我不熟悉鎖定,所以我想問問是否沒有更好/更快的方式?如何使用鎖定對象鎖定添加/讀取收集語句? 這種凍結非常隨機發生,但非常煩人,因爲它會導致所有連接客戶端的延遲。 謝謝!Slowdown:ReaderWriterLock(-1)。我可以使用不同的鎖嗎?

回答

2

你的意思是AcquireReaderLock(-1)/AcquireWriterLock(-1)或類似的嗎?這意味着鎖被爭用 - 在這種情況下,修正當時代碼持有(寫入)鎖的代碼。如果延遲是字面上與鎖定類,那麼也許ReaderWriterLockSlim將有較少的開銷。 lock確實會更簡單(因此更便宜),但不允許相同的粒度 - 它本質上是一個互斥鎖,因此只有一個線程可以與該對象一起玩。對比允許一個作家NAND多個讀取器的讀取器/寫入器鎖。

說實話,這聽起來很簡單,「偶爾,一些代碼將採取寫鎖(阻止其他呼叫者),並需要一段時間才能完成」。 查找違規代碼是黑色藝術,但與鎖本身無關。

相關問題