folgendes Beispiel:C# parallel Lesezugriff ohne zur Liste Kopieren
class Example
{
private readonly List<string> _list = new List<string>();
private readonly object _lock = new object();
public IReadOnlyList<string> Contents
{
get
{
lock (_lock)
{
return new List<string>(_list);
}
}
}
public void ModifyOperation(string example)
{
lock (_lock)
{
// ...
_list.Add(example);
// ...
}
}
}
Wie parallel Zugriff auf die Contents
Liste lesen konnte, ohne das Kopieren der gesamten Liste erreicht werden? In C# gibt es gleichzeitig Collections
, aber es gibt keine threadsichere Liste. In Java gibt es so etwas wie die CopyOnWriteArrayList
.
Wie wäre es [ 'ImmutableList'] (https://msdn.microsoft.com/ en-us/library/dn467185 (v = vs.111) .aspx) aus 'System.Collections.Immutable' Paket –
Wie wäre es mit dem Blockieren der Sammlung? (https://msdn.microsoft.com/en-us/library/dd267312(v=vs.110).aspx) – derape
Solange Sie 'ModifyOperation()' erlauben, während anderer Code (möglicherweise ein anderer Thread) aufgerufen werden hat Zugriff auf das von 'Contents' zurückgegebene Objekt, dann wird es nicht threadsicher, wenn Sie die zugrundeliegende' Liste 'zurücksenden, ohne eine Kopie zu erstellen (wie Sie es schon tun) –