线程读取和写入相同的变量

本文关键字:变量 读取 线程 | 更新日期: 2023-09-27 18:19:56

我想知道在两个线程的情况下是否需要一个锁,一个读取,另一个写入同一个变量
例如:我们有两个线程:A&B、 线程A在时间T读取变量x,线程B在时间T写入变量T。我可以在这里考虑一下某种类型的锁吗?

在我的情况下,我有主线程和许多其他子线程。主线程保存一个List<myObj>,在启动任何子线程之前,我创建myObj的实例,将其分配给List<myObj>,并将myObj传递给子线程
在确定的时刻,List必须根据myObj中包含的值进行排序,并且完全可以发生由主线程读取的List元素同时由子线程写入的情况。

请提出一些建议。

线程读取和写入相同的变量

在深入彻底了解多线程的工作原理之前,甚至不要考虑任何替代方案。强制链接:http://www.albahari.com/threading/,至少。除非你有充分的理由,否则即使这样也不行——尤其是在像List这样复杂的情况下。

在访问任何共享状态时,请确保所有共享状态的方式都是同步的。

可以使用无锁同步,但这是一个相当高级的主题,而且容易出错。如果只更新基元值,Interlocked可能就足够了。

但是,不要忘记您正在处理的对象的契约-只有当项目在排序过程中没有更改时,List的排序才是安全的。因此,在开始排序之前,您需要确保在排序过程中,没有人修改任何可能改变排序的内容。

你真的需要这些子线程吗?他们真的需要从一个单独的线程更新列表(/items)吗?也许将更改发布到UI线程就足够了,同时避免了那些多线程问题?