假設我有兩個線程(線程1,線程2),其中的螺紋是在同一時間訪問高速緩存給定對象,如在下面的代碼幾乎:緩存訪問
Dim expensiveToGetData = Cache("ExpensiveDataKey")
If ExpensiveToGetData is nothing then
'because the cache has expired
ExpensiveToGetData = LoadExpensiveDataFromDataSource()
Cache("ExpensiveDataKey") = ExpensiveToGetData
end If
ProcessExpensiveData(ExpensiveToGetData)
兩個線程都不可能加載緩存,因爲它們都從沒有/過期的緩存請求數據?我在本地機器上運行了一些測試,似乎緩存不止一次被加載。這是一種正常模式?
謝謝你,我以爲我瘋了! – Achilles 2010-11-16 21:14:20
在立即達到鎖定以防止競爭條件之前,請考慮冗餘計算緩存值的影響是否與在並行系統中序列化訪問共享資源的成本進行權衡時的影響。 也就是說,當您鎖定此緩存時,從不同線程(不同頁面請求)訪問緩存現在將排隊緩存資源。在網絡環境中,在走下這條路之前,你真的需要認真思考,因爲它會影響你可以並行處理的請求的數量。 – 2013-08-28 23:47:02