gpt4 book ai didi

C# 线程 - 以线程安全的方式使用类与以线程安全的方式实现它

转载 作者:太空宇宙 更新时间:2023-11-03 18:58:37 25 4
gpt4 key购买 nike

假设我想使用 .Net Framework 中的非线程安全类(文档指出它不是线程安全的)。有时我从一个线程更改 Property X 的值,有时从另一个线程更改,但我从不同时从两个线程访问它。有时我从一个线程调用 Method Y,有时从另一个线程调用,但绝不会同时调用。

这是否意味着我以线程安全的方式使用该类,而文档说明它不是线程安全的不再与我的情况相关?

如果答案是否定的:我是否可以在同一个线程中执行与特定对象相关的所有操作 - 即创建它并始终在同一个线程(但不是 GUI 线程)中调用其成员?如果是这样,我该怎么做? (如果相关,它是一个 WPF 应用程序)。

最佳答案

不,它不是线程安全的。作为一般规则,您不应该在没有某种同步的情况下编写多线程代码。在您的第一个示例中,即使您以某种方式设法确保永远不会同时进行修改/读取,仍然存在缓存值和指令重新排序的问题。

例如,CPU 将值缓存到寄存器中,您在一个线程上更新它,从另一个线程读取它。如果第二个缓存了它,它就不会去 RAM 中获取它,也看不到更新后的值。

看看这篇很棒的帖子,了解更多信息和编写无锁多线程代码的问题 link .它很好地解释了 CPU、编译器和 CLI 字节码编译器如何重新排序指令。

关于C# 线程 - 以线程安全的方式使用类与以线程安全的方式实现它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39676459/

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