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

sti*_*ima 8 c++ posix signals c++11

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Igo*_*nik 6

C++ 14标准草案N4296说:

[support.runtime]/10 C和C++语言的通用子集包含可能出现在格式良好的C++程序中以及符合C程序的所有声明,定义和表达式.POF("普通旧函数")是仅使用来自此公共子集的特征的函数,并且不直接或间接使用任何非POF的函数,除了它可以使用普通无锁原子操作. .比用作在C++程序的信号处理程序的POF之外的任何函数的行为是实现定义.

强调我的.

  • 总结这个相当无益的答案,不,你不能使用条件变量,因为它不是"公共子集"的特征. (6认同)