我想知道我是否需要锁定2个线程的情况,一个读取,另一个写入同一个变量。
例如:我们有2个主题:A& B,线程A在时间T读取变量x,线程B在时间T写入变量T.
我可以在这里考虑某种类型的锁吗?
在我的情况下,我有主线程和许多其他SubThreads。主线程持有List<myObj>
,在开始任何SubThread之前,我创建myObj
个实例,将其分配给List<myObj>
并将myObj
传递给SubThread。
在确定的时刻,List必须根据myObj
中包含的值进行排序,并且完全发生主线程读取的List
元素同时由SubThread写入。
请一些建议。
答案 0 :(得分:3)
是强>
在深入彻底了解多线程的工作原理之前,请不要考虑任何替代方案。必要的链接:http://www.albahari.com/threading/,至少。除非你有充分的理由,否则不会 - 尤其是像List
那样复杂的事情。
每当您访问任何共享状态时,请确保所有共享状态的方式都已同步。
可以使用无锁同步,但这是一个相当高级的主题,并且容易出错。如果您只是更新原始值,Interlocked
可能就足够了。
但是,不要忘记您正在使用的对象的合同 - List
的排序只有在排序过程中项目不发生变化时才是安全的。因此,在开始排序之前,您需要确保noöne正在修改任何可能在排序过程中改变排序的内容。
你真的需要那些子线程吗?他们真的需要从单独的线程更新列表(/ items)吗?也许将更改发布到UI线程可以很好地工作,同时避免那些多线程问题?