多线程访问内存

3

早上好,

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

非常感谢。


你没有说明他们只是从中读取还是还要进行写入。 - Roger Perkins
仅限读取,不写回! - Miguel
如果是关于编程的内容,那么我的第一个要点就适用了;只需要分享即可。 - Marc Gravell
1个回答

10

这完全取决于数据的性质:

  • 如果数据是不可变的(或者可变但实际上你并没有对其进行改动),那么可以让所有线程都直接访问——很好
  • 如果需要对数据进行修改,但是没有两个线程会依赖于其他线程修改的数据——很好
  • 如果需要对数据进行修改,而且存在冲突,但是你能够合理地同步访问数据,使得不存在两个线程死锁等问题——很好,但不总是容易的
  • 如果不能做出任何假设,那么真正的复制数据是最安全的方法,但在数据重复方面有最大的开销;如果数据很容易复制,那么这可能是可以接受的——事实上,可能会比同步更快
  • 如果线程之间互相依赖,那么除了找出一种明智的锁定策略外,别无选择。再次强调:死锁是一个问题——以下是一些想法:
    • 在获取锁时始终提供超时
    • 如果需要锁定两个项,则尝试急切地锁定两个(而不是在开始时锁定一个,然后在进行大量更改之后锁定另一个)——然后你可以简单地释放并重新获取锁,而不必撤消更改或将更改恢复到特定状态

+1。我开始写回复,但是无法添加任何东西到你已经写的内容中。 - Aliostad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接