多线程访问内存

Mig*_*uel 3 c# memory multithreading

早上好,

假设我有6个不同的线程,我想同时与每个线程共享相同的数据.我可以使用我想要共享的数据创建一个类变量,并使每个线程同时访问该内存而不降低性能,或者是否最好将数据的真实副本传递给每个线程?

非常感谢你.

Mar*_*ell 10

这完全取决于数据;

  • 如果数据是不可变的(或者是可变的,但你实际上并没有改变它),那么就把它的所有线程都扔掉 - 很棒
  • 如果你需要改变它,但没有两个线程将依赖于另一个线程突变的数据 - 很棒
  • 如果你需要改变它,并且存在冲突,但你可以明智地同步对数据的访问,这样就不会有两个线程死锁的风险等 - 很好,但并不总是微不足道
  • 如果做出任何假设是不安全的,那么数据的真正克隆是最安全的方法,但在数据复制方面具有最大的开销; 如果复制数据便宜,这可能没问题 - 实际上可能胜过同步
  • 如果线程共同互相依赖,那么你有没有比其他选项找出某种理智的锁定策略的; 再次 - 强调:僵局是一个问题 - 一些想法:
    • 获取锁时始终提供超时
    • 如果你需要锁定两个项目,它可能有助于尝试锁定两个热切地(而不是锁定在一个开始,其他的你已经做了很多改动后的) -那么你可以简单地释放和重走锁,无需撤消更改,或将更改重新置于特定状态