gpt4 book ai didi

c++ - 在自动化测试后安全清理阻塞的 std::thread

转载 作者:太空宇宙 更新时间:2023-11-04 14:33:29 26 4
gpt4 key购买 nike

考虑一些 Mutex 类实现的测试用例。该测试在执行期间创建多个 std::thread 实例。如果根据测试正确实现了 Mutex 类,则所有线程都应该完成。如果出现问题,一个线程可能会无限期地阻塞。测试如何正确清理自身?

一开始以为是detach线程,后来发现线程泄露了。更糟糕的是,该线程依赖于测试用例内部的 Mutex 实例,这会在测试用例返回后偶尔导致访问冲突。Qt 的 QThread 等一些线程库有 terminate() 方法,但我想使用 std::thread 即使 Qt 已经是我项目的依赖项。

是否存在用于测试可能无限期阻塞并发代码的通用模式?

最佳答案

杀死可能持有锁的线程是强制终止线程不受欢迎的主要原因之一,也是 C++11 不支持它的原因。你不应该这样做,期间。

如果您需要做类似的事情,最好的办法可能是生成一个新进程来运行测试;如果它锁定,您可以终止该过程而不会冒同样的风险。

有关为什么终止线程是坏消息的示例,请查看 specific example from the Old New Thing on what sort of garbage thread termination leaves lying around on Windows ;大多数操作系统在不同环境下都会出现类似问题。

关于c++ - 在自动化测试后安全清理阻塞的 std::thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33227040/

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