什么是用于确定代码是否在.net中是线程安全的测量

时间:2014-01-04 13:59:00

标签: c# .net multithreading thread-safety

如果代码是否是线程安全的,我如何测量代码?

可能是一般准则或最佳做法

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

2 个答案:

答案 0 :(得分:0)

我提出了一个简单的规则,这个规则很难实现,因此理论上很难实现。如果您可以向代码中的某些位置注入一些Sleep操作,则代码不是线程安全的,因此以显着的方式更改代码的结果。代码是线程安全的(否则没有可能改变代码执行结果的延迟组合)。

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

答案 1 :(得分:-1)

我认为最好的答案就在这里 Multi Threading,在写这个问题之前,我没有注意到这样的答案 我觉得关闭它更好! 感谢


由280Z28编辑(因为我无法为已结束的问题添加新答案)

算法或应用程序的线程安全性通常根据consistency model来衡量,在存在多个执行线程(或分布式系统的多个进程)时,它保证遵循该linearizability。要检查的两个最重要的事项如下。

  1. 使用多个线程时,是否保留了各个方法的前后条件?例如,如果您的方法“将元素添加到动态大小的列表”,那么一个后置条件将是由于add方法,列表的大小增加1。如果您的算法是线程安全的,那么调用add方法2次将导致大小增加2,无论哪些线程用于添加操作。另一方面,如果算法不是线程安全的,那么对于2个调用使用多个线程可能会导致任何,范围从正确添加2个项目到崩溃的可能性程序完全。
  2. 当对程序中的算法使用的数据进行更改时,这些更改何时对系统中的其他线程可见。这是代码的一致性模型。一致性模型可能很难完全理解,因此我将上面的链接作为您继续学习的起点,同时注意保证sequential consistency或{{3}}的系统通常最容易工作虽然不一定是最容易创造的。