假设存储连接数据的ImmutableHashSet的服务器
ImmutableHashSet<ConnectionData> connections = new ...
Run Code Online (Sandbox Code Playgroud)
然后我有各种调用添加/删除/读取,即:
OnConnected(connectionData) => connections = connections.Add(connectionData);
OnDisconnected(connectionData) => connections = connections.Remove(connectionData);
Run Code Online (Sandbox Code Playgroud)
我的问题是,在上面只对HashSet(Add/Remove)执行单个操作的调用中,我应该锁定连接吗?或者是ImmutableHashSet操作线程安全吗?
将值直接分配回集合的模式不是线程安全的.但是,您通常不希望lock在使用不可变集合时.这些集合的一个主要特性是无锁操作,通常性能更高.相反,使用ImmutableInterlocked类:
ImmutableHashSet<ConnectionData> connections;
ImmutableInterlocked.Update(ref connections,
(collection, item) => collection.Add(item),
connectionData);
ImmutableInterlocked.Update(ref connections,
(collection, item) => collection.Remove(item),
connectionData);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
487 次 |
| 最近记录: |