如何通过发送信号来停止线程

时间:2017-01-01 11:53:56

标签: linux pthreads signals signal-handling

假设一个线程正在运行一些代码:

// thread
while (_running)                 // (1)
{
   rv = read(...);               // (2)
   // do something with data
}

我们可以添加一个信号处理程序来停止线程:

// signal handler
_running = false;

并使用pthread_kill在线程上执行此处理程序。这将解除对(2)的读取的阻止。

这种方法有竞争条件: 如果信号处理程序在(1)和(2)之间执行,则线程不会停止。

如何避免这种竞争条件?

0 个答案:

没有答案