2010-11-08 133 views
1

所以我有一些主要功能。每秒24次打开一个带有功能的助推线程A。该函数将带有数据的缓冲区。它启动一个升压计时器。它打开另一个线程B带有一个函数发送缓冲区。我需要线程A来杀死线程B,如果它执行方式2长。当然,如果线程B在时间上执行了,我不需要杀死它,它应该会自行终止。什么推动功能可以帮助我杀死创建的线程(不加入 - 停止/杀死或类似的东西)?Boost,C++如何杀死由另一个线程打开的线程?

顺便说一句我不能影响函数的速度我在线程B中执行这就是为什么我需要能够在需要时进行处理。

回答

4

您正在寻找的术语是“取消”,如pthread_cancel(3)。取消操作很麻烦,因为取消的线程可能不会执行C++析构函数或释放锁定......但是,不确定性实际上是更差比确定性的否。

因此,升压线程不支持取消(例如,请参阅this older question),但它们确实支持interruption,您可能会弯曲以适应此问题。中断通过常规的C++异常工作,因此它具有可预测的语义。

5

有没有干净的方式杀死一个线程,所以如果你需要做这样的事情,你干净的选择要么使用包含一些取消功能的功能,要么使用一个单独的进程,因为你可以使用干净地杀死一个进程。

除此之外,我的直接反应是,不是“打开”(你的意思是创建?)线程A每秒24次,你最好用线程A读一个缓冲区,将它发送到线程B,然后睡觉,直到准备好读取另一个缓冲区。创建和杀死线程并不是很昂贵,但是以24(或者显然,48)的速度来执行它会让我感到有点过度。

2

请不要随意杀死线程,除非你完全控制它们的执行(然后只是适当的信号让线程正常退出)。你永远不知道其他线程是否在某个你从未听说过的库的关键部分,然后你的程序最终会停在那个CS上,因为它从来没有退出或类似的东西。