在信号处理程序中使用
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 The common subset of the C and C++ languages consists of all declarations,definitions,and expressions
that may appear in a well formed C++ program and also in a conforming C program. A POF (“plain old
function”) is a function that uses only features from this common subset,and that does not directly or indirectly use any function that is not a POF,except that it may use plain lock-free atomic operations… The behavior of any
function other than a POF used as a signal handler in a C++ program is implementation-defined.
强调我的.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。