2012-04-23 19 views
1

在C#4應用程序中,我使用任務並行庫來並行處理Web請求。得到Web響應後,需要更新一些全局變量,我決定添加一個鎖阻止更新該變量。鎖定語句是獲得互斥的最佳選擇嗎?以及TPL中的鎖語句數量(或鎖定塊的大小)與TPL的性能下降之間的確切關係是什麼?任務並行庫的鎖定語句和性能

+1

發佈一些示例代碼將有助於爲此得到答案。 – 2012-04-23 15:43:19

回答

1

您的第一個問題的答案是:是的。和不。您可以使用lock塊,也可以使用Mutex,但在單個應用程序的上下文中幾乎沒有實際區別。

第二個問題的答案是:沒有確切的關係。你可以擁有一百萬個鎖,但是隻有當他們阻止彼此時,性能纔會下降,並且會根據阻塞的程度而降低。 (注意:鎖定本身會導致性能損失。)

您的代碼的確切配置文件將決定什麼樣的關係,並且只有通過運行一些測試和發現才能知道。

+0

關於你的第一條語句:實際上'lock'更加輕量級,而'Mutex'是一個操作系統對象,它總是需要從內核分配一個句柄。 'lock'或者'Monitor'在實際阻塞和滿足時僅使用內核原語(在幕後),即在短暫的旋轉時間之後沒有獲得鎖。所以一般來說,使用鎖定最有可能是更好的選擇,除非您需要鎖定跨越多個進程。 – 2012-04-23 16:22:32