C++ c++;多线程同步

C++ c++;多线程同步,c++,multithreading,thread-synchronization,C++,Multithreading,Thread Synchronization,这是我问题的简化版本 在无限循环中有N个线程执行以下3条指令: A -> B -> C -> A -> B -> C -> A -> B -> ....... 我希望所有线程同时执行指令B,也就是说,只有当所有线程都达到B时,任何线程才应该开始执行B。因此,如果有一个线程执行了B->C->a,那么它应该在这里等待,直到其他线程也准备好执行B 如果可能,请告诉我一个可在windows和MAC上使用的便携式解决方案。您应该查看,特别是关于。N-1信号

这是我问题的简化版本

在无限循环中有N个线程执行以下3条指令:

A -> B -> C -> A -> B -> C -> A -> B -> .......
我希望所有线程同时执行指令B,也就是说,只有当所有线程都达到B时,任何线程才应该开始执行B。因此,如果有一个线程执行了B->C->a,那么它应该在这里等待,直到其他线程也准备好执行B


如果可能,请告诉我一个可在windows和MAC上使用的便携式解决方案。

您应该查看,特别是关于。

N-1信号量数组和互斥锁的部分?所有线程都获取互斥量,包括一个计数器,如果小于N,则释放互斥量并在[counter]处等待信号量数组。第N个线程发现计数器为N,向所有信号量发送信号,将计数器重置为0,执行“B”释放互斥并退出。其他线程在释放时也执行B,但在第n个线程执行“B”并释放互斥锁之前,无法循环并再次进入


所有多任务操作系统都有信号量/互斥。如果可用,您可以使用事件,而不是信号量。

虽然这听起来更像是您想要一个@MikeSeymour:为什么不添加它作为答案呢?谢谢,迈克,是的,看来我需要的是障碍。让我深入了解它的细节,以防我遇到问题。再次感谢!事实上,一个信号量发[n-1]次信号就可以了——不像事件那样,信号量不需要数组。就在昨天。我觉得它是这个系列中最有趣的(我想不必先看其他的)