gpt4 book ai didi

c# - 在单元测试中确定线程安全

转载 作者:可可西里 更新时间:2023-11-01 08:54:06 26 4
gpt4 key购买 nike

我正在编写一个多线程应用程序,我也在尝试找出如何为其编写合适的单元测试。我认为这可能是关于如何最好地做到这一点的另一个问题。

还有一个问题,我有一个像下面这样的类,知道它不是线程安全的,想在单元测试中证明它,但不知道如何去做:

public class MyClass
{
private List<string> MyList = new List<string>();

public void Add(string Data)
{
MyList.Add(Data); //This is not thread safe!!
}
}

最佳答案

证明某些东西是线程安全的是棘手的——可能很难停止问题。您可以证明竞争条件很容易产生,或者很难产生。但不产生竞争条件并不意味着它不存在。

但是:我在这里的常用方法(如果我有理由认为一些代码应该是线程安全的,实际上不是)是在单个 ManualResetEvent 后面启动大量等待的线程。最后一个到达门的线程(使用interlocked来计数)负责打开门,让所有的线程同时命中系统(并且已经存在)。然后他们开始工作并检查正常的退出条件。然后我重复这个过程很多次。这通常足以重现可疑的线程争用,并表明它从“明显损坏”变为“未以明显方式损坏”(这与“未损坏”有很大不同)。

另请注意:大多数代码不必是线程安全的。

关于c# - 在单元测试中确定线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9468800/

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