c++11在信号处理程序中使用条件变量

c++11 use condition variable in signal handler

本文关键字:条件 变量 信号处理 程序 c++11      更新时间:2023-10-16

在信号处理程序中使用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();
    }
}

c++ 14标准草案N4296规定:

[support.runtime]/10 C和c++语言的公共子集由所有声明、定义和表达式组成可能出现在格式良好的c++程序中,也可能出现在符合标准的C程序中。一个POF("老掉牙")function")是一个函数,它只使用来自这个公共子集的特性,它不直接或间接使用任何非POF的函数,除了它可以使用普通的无锁原子操作…任意在c++程序中作为信号处理程序使用的除POF以外的函数是实现定义的。

强调我的。