早上好
假设我有 6 个不同的线程,我想同时与每个线程共享相同的数据。我可以用我想要共享的数据创建一个类变量并让每个线程同时访问该内存而不降低性能,还是将数据的真实副本传递给每个线程更可取?
非常感谢。
最佳答案
这完全取决于数据;
- 如果数据是不可变的(或者是可变的,但你实际上并没有改变它),那么就把所有的线程都处理掉——很好
- 如果你需要改变它,但没有两个线程会依赖另一个改变的数据 - 很好
- 如果你需要改变它,并且存在冲突,但你可以明智地同步对数据的访问,这样就不会有两个线程死锁等风险 - 很好,但并不总是微不足道的
- 如果做出任何假设都不安全,那么真正的数据克隆是最安全的方法,但在数据复制方面的开销最大;如果数据的复制成本很低,这可能没问题——而且确实可能优于同步
- 如果线程确实相互依赖,那么您别无选择,只能找出某种明智的锁定策略;再次 - 强调:死锁是这里的一个问题 - 一些想法:
- 总是在获取锁时提供超时
- 如果您需要锁定两个项目,尝试锁定两个项目急切可能会有所帮助(而不是在开始时锁定一个项目,然后在完成大量更改后锁定另一个项目)- 然后您可以简单地释放并重新获取锁,而不必撤消更改或将更改放回特定状态
关于c# - 多线程访问内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4690090/