【发布时间】:2018-07-20 03:27:21
【问题描述】:
假设一个服务器存储了一个连接数据的 ImmutableHashSet
ImmutableHashSet<ConnectionData> connections = new ...
然后我有各种调用添加/删除/读取这个,即:
OnConnected(connectionData) => connections = connections.Add(connectionData);
OnDisconnected(connectionData) => connections = connections.Remove(connectionData);
我的问题是,在上述仅对 HashSet 执行单个操作(添加/删除)的调用中,我应该锁定连接吗?还是 ImmutableHashSet 操作线程安全?
【问题讨论】:
-
你对
connections变量做了两个操作。 -
ImmutableHashSet 操作线程安全吗?阅读文档 - 但这不是全部
-
您应该阅读 @EricLippert 2007 年末关于不变性的博客系列,从这里开始:blogs.msdn.microsoft.com/ericlippert/2007/11/13/…。如果集合是不可变的,那么您引用的集合始终具有内部完整性,并且,它永远不会改变。但是,另一个线程上的参与者所引用的不一定是同一个。