C# 确定代码在.net中是否是线程安全的度量是什么

C# 确定代码在.net中是否是线程安全的度量是什么,c#,.net,multithreading,thread-safety,C#,.net,Multithreading,Thread Safety,如何衡量代码是否是线程安全的 可能是一般准则或最佳实践 我知道线程安全的代码是跨线程工作而不做不可预知的行为,但这有时会变得非常棘手和困难 我提出了一个简单的规则,它可能很难实现,因此本质上是理论性的。如果您可以将一些Sleep操作注入代码中的某些位置,从而显著地更改代码的结果,那么代码就不是线程安全的。否则代码是线程安全的(不存在可以更改代码执行结果的延迟组合) 在考虑线程安全时,不仅要考虑代码,还要考虑代码的其他部分、框架、操作系统、外部因素,如磁盘驱动器和内存。。。每件事这就是为什么这个“

如何衡量代码是否是线程安全的

可能是一般准则或最佳实践


我知道线程安全的代码是跨线程工作而不做不可预知的行为,但这有时会变得非常棘手和困难

我提出了一个简单的规则,它可能很难实现,因此本质上是理论性的。如果您可以将一些Sleep操作注入代码中的某些位置,从而显著地更改代码的结果,那么代码就不是线程安全的。否则代码是线程安全的(不存在可以更改代码执行结果的延迟组合)


在考虑线程安全时,不仅要考虑代码,还要考虑代码的其他部分、框架、操作系统、外部因素,如磁盘驱动器和内存。。。每件事这就是为什么这个“经验法则”主要是理论性的。

我认为最好的答案是在这里 ,在写这个问题之前,我不可能注意到这样的答案 我认为最好是关闭它! 谢谢


按280Z28编辑(因为我无法为封闭式问题添加新答案) 一个算法或应用程序的线程安全性通常是根据在多个执行线程(或分布式系统的多个进程)存在时保证遵循的线程安全性来衡量的。需要检查的两件最重要的事情如下

  • 当使用多个线程时,是否保留单个方法的前置和后置条件?例如,如果您的方法“将一个元素添加到动态大小的列表”,那么一个post条件是,由于add方法,列表的大小将增加1。如果您的算法是线程安全的,那么调用add方法2次将导致大小正好增加2,而与add操作使用的线程无关。另一方面,如果算法不是线程安全的,那么对这2个调用使用多个线程可能会导致任何结果,从正确地添加这2个项到完全破坏程序的可能性
  • 当对程序中算法使用的数据进行更改时,系统中的其他线程何时可以看到这些更改。这是代码的一致性模型。一致性模型可能很难完全理解,因此我将把上面的链接作为您继续学习的起点,同时还要注意,系统通常是最容易使用的,尽管不一定是最容易创建的

  • 是我的错,我在这里搜索时发现了这样一个问题!建议的“重复”是一个完全不同的问题。如果重新打开此问题,我可以发布此问题的真实答案。我继续编辑了下面的一个答案,以回答如何测量代码的线程安全性的具体问题。你是我的英雄:D如果他们打开此问题,请在单独的答案中添加,我将其标记为我问题的答案,谢谢“线程安全”这并不意味着只有一种结果是可能的。例如,线程安全加密随机数生成器的结果肯定会受到算法中引入睡眠操作的影响。@280Z28确实如此,这就是我写“以一种重要的方式”的原因。这是一个经过深思熟虑的总括术语,对我很有用。“重大”的含义因情况而异。我认为,当您只想测试代码的线程安全性时,生成一个随机数而不是另一个随机数并不重要。