繁体   English   中英

Boost,C ++如何杀死另一个线程打开的线程?

[英]Boost, C++ how to kill thread opened by another thread?

所以我有一些主要功能。 每秒24次打开具有功能的升压线程A 该函数接收一个带有数据的缓冲区。 它启动一个升压计时器。 它打开另一个线程B并带有向其中发送缓冲区的函数。 我需要线程A杀死线程B,如果它正在执行2长。 当然,如果线程B已及时执行,则不需要杀死它,它应该杀死自己。 什么增强功能可以帮助我杀死创建的线程(不加入-停止/杀死等)?

顺便说一句,我不能影响线程B中所赋予的功能速度,这就是为什么我需要能够在需要时将其杀死。

没有清除线程的明确方法,因此,如果您需要执行类似的操作,那么清除选择是使用包含某些取消功能的函数,或者为其使用单独的进程,因为您可以清除进程。

除此之外,我的直接反应是,而不是每秒24次“打开”(您要创建吗?)线程A,最好让线程A读取缓冲区,将其发送到线程B,然后休眠直到准备读取另一个缓冲区为止。 创建和杀死线程并不是昂贵,但是以24秒(或者显然是48秒)的速度进行操作会让我有些吃惊。

您正在寻找的术语是“取消”,如pthread_cancel(3)所示 取消很麻烦,因为被取消的线程可能无法执行C ++析构函数或在出路时释放锁……但是随后可能再次执行; 实际上,不确定性要比确定的

因此,boost线程不支持取消(例如,请参见此较早的问题 ),但它们确实支持中断 ,您可以弯曲以适应。 中断通过常规C ++异常起作用,因此具有可预测的语义。

请不要随意杀死线程,除非您完全控制线程的执行(然后发出适当的信号让线程正常退出)。 您永远不会知道其他线程是否在您从未听说过的库的某个关键部分中,然后您的程序最终会因为从未退出过CS之类而停在该CS上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM