Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对内存的多线程访问_C#_Multithreading_Memory - Fatal编程技术网

C# 对内存的多线程访问

C# 对内存的多线程访问,c#,multithreading,memory,C#,Multithreading,Memory,早上好 假设我有6个不同的线程,我想同时与它们中的每一个共享相同的数据。我可以用我想要共享的数据创建一个类变量,并使每个线程并发地访问该内存而不降低性能,还是最好将数据的真实副本传递给每个线程 非常感谢。这完全取决于数据 如果数据是不可变的(或者是可变的,但实际上并没有对其进行变异),那么就扔掉所有的线程——太好了 如果您需要对它进行变异,但是没有两个线程会依赖于另一个线程变异的数据,这太棒了 如果您需要对它进行变异,并且存在冲突,但是您可以明智地同步对数据的访问,这样就不会有两个线程死锁的风

早上好

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


非常感谢。

这完全取决于数据

  • 如果数据是不可变的(或者是可变的,但实际上并没有对其进行变异),那么就扔掉所有的线程——太好了
  • 如果您需要对它进行变异,但是没有两个线程会依赖于另一个线程变异的数据,这太棒了
  • 如果您需要对它进行变异,并且存在冲突,但是您可以明智地同步对数据的访问,这样就不会有两个线程死锁的风险,等等-很好,但并不总是微不足道的
  • 如果做出任何假设都不安全,那么真正的数据克隆是最安全的方法,但在数据复制方面的开销最大;如果数据的复制成本很低,这可能很好,而且可能比同步性能更好
  • 如果线程确实相互依赖,那么除了想出某种明智的锁定策略之外,您别无选择;再次强调:死锁是一个问题-一些想法:
    • 获取锁时始终提供超时
    • 如果您需要锁定两个项目,那么尝试同时锁定这两个项目可能会有所帮助(而不是在开始时锁定一个项目,在做了大量更改后锁定另一个项目),然后您可以简单地释放并重新锁定,而无需撤消更改或将更改恢复到特定状态

你不能说他们是在阅读还是在回信。不是回信,只是在阅读!然后我的第一个要点适用;只需分享+1。我开始写回复,但无法在您写的内容中添加任何内容。。。