我写了一个简单的作业队列,它使用一个线程逐个运行队列中的作业。线程本身来自池,所以只要作业队列对象在其周围,它的生命周期就会持续。作业从队列中弹出,然后在作业上调用run(),并在完成后放弃。在线程上处理作业取消的最佳方法
我想知道什么样的范例可以用来在中途中止工作。天真的做法是定期检查一个中止标志。问题是由于I/O阻塞或其他一些计算繁重的任务,一些工作需要一段时间。
我认为的另一个选择是完全杀死线程。这是一个潜在的肮脏和错误的解决方案。
还有其他的方法吗?
编辑:由于我在C++土地,有没有办法注入异常到另一个线程?它会立即中断执行并返回到主线程。我认为这将是理想的。
如果你真的没有看到使用“* flag”* - 类似上面提到的任何可能性,请查看'pthread_cancel()'。 – alk
或者只是使用标志解决方案,或者运行一个可以杀死的单独进程。杀死一个线程是一个糟糕的主意。请参阅http://www.drdobbs.com/parallel/interrupt-politely/207100682 –
@alk:AFAIK,使用'pthread_cancel()'也会导致线程本身退出。我试图避免这一点。基本上,我想要一种方法来取消正在运行的作业,以便可以使用干净的作业队列。一种方法是重新创建线程。 – MarkP