在信号处理程序中使用std::condition_variable::notify_one
是否安全?例如:
enum State {
DoNot,
Do,
};
State state;
std::mutex mutex;
// worker thread
std::thread th = std::thread([]()
{
std::unique_lock<std::mutex> lc(mutex);
cv.wait(lc, []() { return state; });
});
//signal handler
void handler(int sig)
{
if (sig == SOME_SIG)
{
std::unique_lock<std::mutex> lc(mutex);
state = Do;
cv.notify_one();
}
}
答案 0 :(得分:6)
C ++ 14标准草案N4296说:
[support.runtime] / 10 C和C ++语言的通用子集包含所有声明,定义和表达式 这可能出现在格式良好的C ++程序中,也可能出现在符合C的程序中。一个POF(“普通老 function“)是一个只使用来自这个公共子集的特性的函数,它不直接或间接地使用任何不是POF的函数,除了它可以使用普通的无锁原子操作...... 行为任何 除了用作C ++程序中的信号处理程序的POF之外的函数是实现定义的。
强调我的。