假设一个线程正在运行一些代码:
// thread
while (_running) // (1)
{
rv = read(...); // (2)
// do something with data
}
我们可以添加一个信号处理程序来停止线程:
// signal handler
_running = false;
并使用pthread_kill
在线程上执行此处理程序。这将解除对(2)的读取的阻止。
这种方法有竞争条件: 如果信号处理程序在(1)和(2)之间执行,则线程不会停止。
如何避免这种竞争条件?