首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何编写测试用例以确保线程安全

如何编写测试用例以确保线程安全
EN

Stack Overflow用户
提问于 2010-07-15 18:19:01
回答 4查看 870关注 0票数 2

我用C++编写了一个线程安全(至少目标是这样)的容器类。我在访问成员时锁定互斥锁,并在完成时释放。现在,我试着写一个测试用例,如果它真的是线程安全的。比方说,我有容器容器和两个线程Thread1 Thread2。

代码语言:javascript
运行
复制
Container container;
Thread1()
{
    //Add N items to the container
}
Thread2()
{
    //Add N items to the container
}

这样,它在N=1000上就没有问题了。

但我不确定这个回归测试是否足够。有没有一种确定性的方法来测试这样的类?

谢谢。

EN

回答 4

Stack Overflow用户

发布于 2010-07-15 18:25:51

没有真正的方法来编写一个测试来证明它的安全性。

您只能将其设计为安全的,并测试您的设计是否已实现。你能做的最好的事情就是对它进行压力测试。

票数 7
EN

Stack Overflow用户

发布于 2010-07-15 18:37:07

我猜您编写了一个通用容器,并且希望验证两个不同的线程不能同时插入项。

如果我的假设是正确的,那么我的建议是编写一个自定义类,在其中重载复制构造函数,插入一个可以参数化的睡眠。

要测试您的容器,请为您的自定义类创建它的一个实例,然后在第一个线程中,插入具有长sleep的自定义类的实例,同时启动第二个线程,尝试插入具有短sleep的自定义类的实例。如果第二次插入在第一次之前返回,您就知道测试失败了。

票数 1
EN

Stack Overflow用户

发布于 2010-07-15 18:31:23

这是一个合理的起点,尽管我会提出一些建议:

  1. 在四核机器上运行测试为了提高拥有固定线程数量的实际资源的几率,我建议随机产生一个线程数量,其下限等于测试计算机上的处理器数量,上限是number.
  2. Consider偶尔运行的项目数量(例如100,000)的四倍。
  3. 在优化的发布(非调试)构建上运行您的测试。

如果你的目标是Windows,你可能会考虑使用临界区而不是互斥锁,因为它们通常更有性能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3254608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档