我有一個自定義的Cache實現,它允許使用LRU(最近最少使用)緩存替換算法緩存TCacheable<TKey>
後代。如何提高多線程訪問Cache(自定義實現)
每一個元件被訪問時,它被鼓入到使用以下同步功能的LRU隊列的頂部:
// a single instance is created to handle all TCacheable<T> elements
public class Cache()
{
private TCacheable<T> oldest, newest;
private object syncQueue = new object();
private void topQueue(TCacheable<T> el)
{
lock (syncQueue)
if (newest != el)
{
if (el.elder != null) el.elder.newer = el.newer;
if (el.newer != null) el.newer.elder = el.elder;
if (oldest == el) oldest = el.newer;
if (oldest == null) oldest = el;
if (newest != null) newest.newer = el;
el.newer = null;
el.elder = newest;
newest = el;
}
}
}
在此函數的瓶頸是lock()
操作者,這限制了對高速緩存訪問一次只有一個線程。
問題:是否有可能擺脫lock(syncQueue)
這個函數,同時仍然保持隊列的完整性?
上下文不清楚。這個類在多線程環境中如何使用?爲什麼你用於鎖定實例的變量不是靜態的? '最新'是靜態的嗎? 'TCacheable'看起來像什麼? –
2010-05-29 06:55:58
對不起,更新了代碼。 Cache類實現了一個緩存算法,並且它的單個實例被構造來處理所有緩存的元素。 'newest',''''''變量以及'syncQueue'都與緩存實例相關,並且與存儲所有緩存元素的隊列相關。 – Andy 2010-05-29 06:59:56
感謝您的編輯。儘管如此,仍然不清楚「最新」變量。它是靜態的嗎? – 2010-05-29 07:00:05