已編寫下面的代碼以創建由列表組成的數組池。我想稍後以並行方式使用它。要創建池,我想通過預先填充的模板進行復制。 使用模板創建ConcurrentBag
List<candle>[] sourceCandleList = new List<candle>[3];
// populate sourceCandleList here with data
ConcurrentBag<List<candle>[]> poolList = new ConcurrentBag<List<candle>[]>();
int maxThreads = 64;
for (int i = 0; i < maxThreads; i++)
{
poolList.Add(sourceCandleList);
}
這是否創建sourceCandleList的64個深層副本?如果不是,ConcurrentBag仍然是線程安全的嗎?
我不確定的原因是因爲ConcurrentBag中的所有列表似乎都是空的,如果我清除sourceCandleList
就像sourceCandleList.Clear()
。
concurrentbag的實例是線程安全的。沒有更改您存儲的對象實例的線程安全性。不,在add方法中沒有魔法,沒有深拷貝或淺拷貝操作被執行。 – rene
是不同的線程將使用'List []','List '或'candle'的相同實例嗎? –
@rene但我添加了相同的對象64次。 – Manngo