场景
- 在开发多线程程序时,经常由于需要重新执行任务从而取消(停止)工作线程。
C++11
目前并没有很好的取消线程执行的机制。那么我们应该如何实现取消线程呢?
说明
-
C++11
使用<future>
库进行线程间数据通讯,也可以利用它来进行控制线程停止。但是没有pthread
那么强大,pthread
有取消点函数,线程执行到取消点函数就会判断如何线程状态设置为取消,那么就会调用预先设定的线程清理函数清理资源,而取消点之后的代码块不会执行,最后再中止线程。而C++11
并没有取消点的设计。只有在工作线程里判断某个值如果是取消设置的值,那么就会根据代码里的行为继续执行非业务代码,比如跳出循环。 -
C++11
有了promise
,我们可以通过它来调用set_value
来把future
设置为ready
状态,之后工作线程里的future
通过wait_for
方法来判断线程状态是否改变。之后跳出工作循环。 -
除了使用
promise
对象,我们还可以使用一个变量判断是否已经停止,这个变量可以是atomic_int
也可以是volatie
类型的变量,