我正在尝试运行两个独立的线程,比如A和B.A和B运行完全不同的数据,而A只需要来自B的一小部分数据。它们都需要一直运行。如何从线程B中检索数据,而不是中断B的运行。
我是多线程新手,你能举例告诉我吗?
答案 0 :(得分:2)
这不是线程如何工作,线程不“拥有”数据(大多数时候)。您可以像访问任何其他数据一样访问在其他线程上使用或创建的数据,但这样做可能非常危险。
问题是大多数数据结构都不能同时从多个线程访问(它们不是thread-safe)。有几种方法可以解决这个问题:
lock
(或其他一些同步构造)来访问共享资源。这样做可以确保一次只有一个线程访问资源,因此它是安全的。这是最常用的方法(它每次都有效),它可能是最常见的解决方案,也是最容易正确的解决方案(每次访问资源时,只在右锁定对象上lock
)。但它可能会损害性能,因为它可以使线程相互等待很多。System.Collections.Concurrent
。string
是安全的。Interlocked
操作或volatile
操作。这就是#3中的大多数结构在内部实现的方式,它是一种比#1更高效的解决方案。但是这样做也很难,这就是为什么你应该避免它,除非你真的知道你在做什么。你有几个选择,可能会让人感到困惑。但最好的选择通常是使用lock
来访问共享资源,或者使用库中的线程安全结构,这样做并不难。但如果你发现这还不够,你可以选择更高级的替代方案,但很难做到正确。