如何确保条件变量信号的成功 我学习C++并发,并且有条件变量作为内置同步原语。< /P>

如何确保条件变量信号的成功 我学习C++并发,并且有条件变量作为内置同步原语。< /P>,c++,concurrency,C++,Concurrency,我的问题是: 用于通过cv.wait()和cv.signal()确保同步的两个线程。如果其中一个线程被操作系统取消调度,因此它处于就绪状态而不是阻塞状态,那么另一个线程发出的信号将被忽略。因此,整个程序将进入死区状态 对于这种特殊情况,如何确保cv.signal()成功唤醒另一个线程?如果发送信号时某个线程没有运行,并且没有其他线程接收到该信号,那么操作系统将重新调度该线程,并合理地及时发送cv信号。您不必担心,这是实现所需的行为。如果在某些特定使用中速度不够快,则不要使用条件变量(在不专用于您

我的问题是: 用于通过cv.wait()和cv.signal()确保同步的两个线程。如果其中一个线程被操作系统取消调度,因此它处于就绪状态而不是阻塞状态,那么另一个线程发出的信号将被忽略。因此,整个程序将进入死区状态


对于这种特殊情况,如何确保cv.signal()成功唤醒另一个线程?

如果发送信号时某个线程没有运行,并且没有其他线程接收到该信号,那么操作系统将重新调度该线程,并合理地及时发送cv信号。您不必担心,这是实现所需的行为。如果在某些特定使用中速度不够快,则不要使用条件变量(在不专用于您的软件的盒子上进行繁忙的旋转,消耗CPU周期-低延迟但效率非常低,并且是一种非常反社会的操作)。条件变量与互斥体一起使用,正确使用条件变量和互斥量将正确处理此竞争条件。