gpt4 book ai didi

C# 多线程 : Acquire read lock necessary?

转载 作者:IT王子 更新时间:2023-10-29 03:55:03 25 4
gpt4 key购买 nike

是否有必要在从多个线程读取变量之前获取变量的锁?

最佳答案

简短的回答是:视情况而定。

长答案是:

  • 如果它不是共享值,即只有一个线程可以看到它(或使用它),则不需要任何同步。

  • 如果它是一个不可变的值,也就是说,你只设置它一次,然后只读取它,那么在没有同步的情况下这样做是安全的(只要你不在第一次写入完成之前开始读取) .

  • 如果它是最多 32 位的“原始”类型(例如 byteshortint),您读取时可以获得陈旧(旧)数据。如果那不打扰你,你就定了。如果不需要陈旧数据,则使变量 volatile无需额外的读取同步即可解决此问题。但是,如果您有赛车作家,则需要遵循与下面的 long 相同的建议。

  • 如果它是超过 32 位的“原始”类型(例如 longdecimaldouble),您需要同步,否则你可能会读取一个值的“一半”,另一个值的“一半”,并得到疯狂的结果。为此,推荐的方法是使用 Interlocked 中的方法。类,用于读取和写入..

  • 如果它是引用类型,您将需要同步以避免看到无效状态(Jeff Lamb 的 picture example 是一个很好的)。 lock声明可能就足够了。同样,您需要为读取和写入锁定。

还有一些其他的要点需要考虑(例如锁定多长时间),但我认为这些足以回答您的问题。

关于C# 多线程 : Acquire read lock necessary?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1668719/

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