已关闭,此问题为opinion-based。目前不接受答复。
**想改善这个问题吗?**更新问题,以便editing this post可以用事实和引用来回答。
4天前关闭。
Improve this question
我正在尝试写一个基于gtest的测试 Package 器,它支持超时。
从逻辑上讲,我会接受一个函数f
,创建一个新线程来运行它,并在经过一定的时间后确定线程是否已经完成。
如果线程还没有完成,那么它就会超时并强制终止它,但是我还没有找到一种特别优雅的终止线程的方法。
许多人的做法是让线程与外部变量共享一个原子变量,当你想杀死它时,修改该变量,等待线程注意到它并自毁。但我不想让f
与外部变量耦合(因为f
可以是任何东西,而不是一个总是可以检查bool标志的死循环)。Signal
也不起作用,因为它会杀死整个进程。
关于这一点,有什么最佳实践吗?
1条答案
按热度按时间g2ieeal71#
只有两种方法可以杀死一个线程,并且可以合理地确保杀死线程的进程仍然能够运行:
1.将要终止的线程与请求终止的线程隔离在不同的进程中。
1.有一个方法来配合你想杀死的线程。
没有第三种选择。它不存在。线程可以以许多不同的方式污染它们所在的进程,如果它们不清理这些东西,那么该进程就无法继续进行可靠的前进。