有什么方法可以测试并发数据结构,以确保从多线程访问数据结构时数据结构的行为正确?
发布于 2011-02-08 06:01:11
所有其他的答案都集中在通过测试代码并以某种形式实际运行它,或者礼貌地说“不要自己做,使用现有的库”来实际测试代码。
这是很棒的,但是IMO,最重要的(实际测试也很重要)测试是逐行查看代码,对于,每一行代码都会问“如果我在这里被另一个线程中断了会发生什么?”想象一下另一个线程,在这个中断期间运行几乎任何其他行/函数。事情还会保持一致吗?当竞争资源时,其他线程是否阻塞或旋转?
这就是我们在学校学习并发时所做的,这是一种令人惊讶的有效方法。总之,我觉得花时间向自己证明事情是一致的,并且在所有状态下都像预期的那样工作,这是你在处理这些东西时应该使用的第一个技术。
发布于 2011-02-08 05:28:40
我通常通过在分布式线程/进程的适当位置插入sleep()调用来测试这类事情。
例如,要测试一个锁,在争用点将sleep(2)放入所有线程中,并在大约1秒的间隔内产生两个线程。第一个应该获得锁,第二个应该等待。
大多数竞态条件都可以通过扩展此方法进行测试,但如果您的系统有太多组件,则可能很难或不可能知道需要测试的每个可能的条件。
发布于 2011-02-08 05:33:56
并发系统是概率的,错误通常很难复制。因此,您需要运行各种输入/输出用例,每种用例都经过一段时间(小时、天等)的测试,以便检测可能的错误。
并发数据结构的测试包括检查容器在插入和删除等预期事件之前和之后的状态。
https://stackoverflow.com/questions/4926800
复制相似问题