Nic*_*ico 7 .net c# parallel-processing
请考虑以下示例:
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);
// ...
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何Contents在不复制整个List的情况下实现对List的并行读访问?在C#中有并发Collections,但没有线程安全List.在Java中有类似的东西CopyOnWriteArrayList.
在我看来ImmutableList<T>,System.Collections.Immutable包中的类非常适合这种情况.它实现IReadOnlyList<T>,因为它是不可变的,即从未修改过,你可以直接从read访问器返回它.所需的唯一同步将在修改操作之间:
class Example
{
private ImmutableList<string> _list = ImmutableList<string>.Empty;
private readonly object _lock = new object();
public IReadOnlyList<string> Contents => _list;
public void ModifyOperation(string example)
{
lock (_lock)
{
// ...
_list = _list.Add(example);
// ...
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |