我用C++编写了一个线程安全(至少目标是这样)的容器类。我在访问成员时锁定互斥锁,并在完成时释放。现在,我试着写一个测试用例,如果它真的是线程安全的。比方说,我有容器容器和两个线程Thread1 Thread2。
Container container;
Thread1()
{
//Add N items to the container
}
Thread2()
{
//Add N items to the container
}
这样,它在N=1000上就没有问题了。
但我不确定这个回归测试是否足够。有没有一种确定性的方法来测试这样的类?
谢谢。
发布于 2010-07-15 18:25:51
没有真正的方法来编写一个测试来证明它的安全性。
您只能将其设计为安全的,并测试您的设计是否已实现。你能做的最好的事情就是对它进行压力测试。
发布于 2010-07-15 18:37:07
我猜您编写了一个通用容器,并且希望验证两个不同的线程不能同时插入项。
如果我的假设是正确的,那么我的建议是编写一个自定义类,在其中重载复制构造函数,插入一个可以参数化的睡眠。
要测试您的容器,请为您的自定义类创建它的一个实例,然后在第一个线程中,插入具有长sleep
的自定义类的实例,同时启动第二个线程,尝试插入具有短sleep
的自定义类的实例。如果第二次插入在第一次之前返回,您就知道测试失败了。
发布于 2010-07-15 18:31:23
这是一个合理的起点,尽管我会提出一些建议:
如果你的目标是Windows,你可能会考虑使用临界区而不是互斥锁,因为它们通常更有性能。
https://stackoverflow.com/questions/3254608
复制相似问题