关机时终止多个线程的最佳方法

时间:2018-06-08 17:34:58

标签: multithreading shutdown

我正在寻找安全关闭多个线程的方法,这些线程的工作是

while(1) {
    doAction
    sleep
}

我正在考虑使用布尔说is_shutting_down并让while循环在进入睡眠状态之前检查它。但是,我担心如果处于睡眠状态,在再次检查变量之前,shutdown必须等待睡眠完成。想知道是否有办法wakeup睡眠线程并优雅地退出。

1 个答案:

答案 0 :(得分:0)

在.NET中:如果线程没有进行清理:将线程的IsBackground属性设置为true,它将随进程终止。

如果要进行清理,我建议实现一个显式调用来确实设置一个布尔值(或在.NET中使用任务时取消令牌)在这种情况下,关闭进程的线程将不得不等待至少工作线程唤醒和清理的休眠时间。

我建议不要中止线程。虽然它可能会中断线程,但如果它在Abort时正在做某事,就像写入文件一样,它可能没有完成它的工作,这可能会让状态处于不稳定状态。