> I also quite doubt that std::mutex, and even more so std::condition_variable are guaranteed to be signal safe.
They are not. Use sem_t for signaling.
edit: also even if they where, the signal handler might wait forever for a mutex owned by the blocked thread.