gpt4 book ai didi

c# - 线程问题: Double Lists - introducing cross reference

转载 作者:行者123 更新时间:2023-12-03 13:21:25 26 4
gpt4 key购买 nike

我有2个在不同上下文中使用的不同对象的列表。每个列表都由多个线程访问,这些线程可以添加,删除和更改列表中对象的状态。通过锁定列表,可以保护两个列表免受多重访问。那似乎很好。
现在需要List1中的对象持有对List2中对象的引用,以便读取特定属性(该属性通过不同的线程获取WRITEN)。
因此,尽管每个列表(以及因此包含的对象)都受到了防止多次访问的保护,但是现在一个线程可以写入List1 Object1.Property,而另一个线程可以通过List2 Object2.Object1.Property读取它。
这种情况安全吗? (我认为不是,但是不确定100%)。
如果不安全-使其安全的最佳方法是什么?

最佳答案

然后,您应该直接在已写对象上应用锁。如果在修改“属性”之前锁定Object1,则无论线程使用Object1.Property还是Object2.Object1.Property,它都将起作用。

要知道它是否是线程安全的而没有锁定,那么它取决于属性的类型以及如何对其进行修改。读/写操作对32位长的数据(例如int或引用)是线程安全的。但是您的操作可能需要多次读/写。

Object.IntProperty = 3; // Write-only on a 32bit value, thread-safe
Console.WriteLine(Object.IntProperty); // Read-only on a 32bit value, thread-safe
Object.IntProperty++; // Read + Write, not thread-safe. Requires locking

关于c# - 线程问题: Double Lists - introducing cross reference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8445523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com