C++ 如何在C++;

C++ 如何在C++;,c++,c,C++,C,我不想暂停和恢复主要功能,除了睡眠方法外,没有其他方法。请帮助假设您有其他线程在main之外运行,您可以在main()中使用sem\u wait(信号量初始化为0),然后在您的线程中随时调用sem\u post 关于信号量和用法:太模糊了,你到底想做什么?睡觉?或者等待另一个线程上的条件?请参阅本例中的pthread拘留将是一种更合适的惩罚。请参阅我不想避免旋转锁…当一个事件发生时,我不想继续执行main()方法请告诉我是否等待(2次)然后,在执行sem_post一次之后,如果信号量被初始化为0

我不想暂停和恢复主要功能,除了睡眠方法外,没有其他方法。请帮助

假设您有其他线程在main之外运行,您可以在
main()
中使用
sem\u wait
(信号量初始化为0),然后在您的线程中随时调用
sem\u post


关于信号量和用法:

太模糊了,你到底想做什么?睡觉?或者等待另一个线程上的条件?请参阅本例中的pthread拘留将是一种更合适的惩罚。请参阅我不想避免旋转锁…当一个事件发生时,我不想继续执行main()方法请告诉我是否等待(2次)然后,在执行sem_post一次之后,如果信号量被初始化为0,它是否调用一个线程
信号量的值必须
>=1
,以便
sem_wait
继续。如果从初始值
0
开始,则
sem\u wait
将阻止,直到
sem\u post
将其增量
1
1
。对于每个
sem_wait
,都必须有一个相应的
sem_post
,用于解除阻塞线程的阻塞。希望这对你有帮助!但是在2个sem_wait和1个sem_post之后,被阻塞的第一个线程是否将继续运行,或者是否需要一个更多的sem_post,该sem_post将同时继续运行两个线程(init为0)如果使用0初始化,则sem_wait将阻塞并使值等于-1,然后在sem_post之后,其值将为bcm 0,线程将被解除阻塞,因此它不需要值>=1。它是否保持
0
或变为
负值取决于实现,无论哪种方式,概念都是相同的。我将讨论它保持为零的版本。要继续执行
sem\u wait
semaphore
的值必须为
非零。如果为零,则等待,不执行减量操作。如果该值为
0
且两个线程执行
sem\u wait
,则该值保持为零,而不是递减。每当出现第1个
sem\u post
时,该值将递增1,等待较长时间的线程将使sem值返回到
0
。查看我在ans中添加的链接。