gpt4 book ai didi

multithreading - 如果我有1个线程写入和1个线程读取int32,那么它是线程安全的吗?

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

我正在使用C#,我需要知道是否有1个线程读取和1个线程写入是安全的,而不使用任何volatile或锁。我只会读/写到32位整数和 bool 值。

最佳答案

这几乎是线程不安全代码的定义。如果您分析了对线程代码中锁定的需求,那么您始终会精确地寻找这种模式。如果您不锁定,则读取的线程将观察到变量的随机变化,与变量的执行完全不同步,并在完全随机的时间进行。

从C#内存模型获得的唯一保证是int和bool更新是原子的。一个昂贵的词,这意味着您不会偶然读取一个值,其中值中的某些字节具有新值,而某些字节具有旧值。这将产生一个完全随机的数字。并非每个值更新都是原子的,长, double 和结构类型(包括Nullable <>和十进制)不是原子的。

在必要的地方不锁定会导致很难调试的问题。它们取决于时序,程序往往会陷入时序变化不大的执行模式。但是,例如当机器被其他任务占用时,情况可能突然改变。您的程序可能会运行一周,然后在收到电子邮件时失败一次:)这是不可辩驳的。

关于multithreading - 如果我有1个线程写入和1个线程读取int32,那么它是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26436249/

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