这里是我的问题的一个简化版本。C++多线程同步
有执行以下无限循环3说明N个线程:
A -> B -> C -> A -> B -> C -> A -> B -> .......
我想所有的线程执行指令B同时即如果所有线程都达到B.任何线程B的执行应该只是开始因此,如果有已执行B中的话题 - >ç - > A,它应该在这里等着,直到其他线程也准备执行B.
如果可能的话,请让我知道的便携式解决方案,将工作在两个窗口& MAC。
这里是我的问题的一个简化版本。C++多线程同步
有执行以下无限循环3说明N个线程:
A -> B -> C -> A -> B -> C -> A -> B -> .......
我想所有的线程执行指令B同时即如果所有线程都达到B.任何线程B的执行应该只是开始因此,如果有已执行B中的话题 - >ç - > A,它应该在这里等着,直到其他线程也准备执行B.
如果可能的话,请让我知道的便携式解决方案,将工作在两个窗口& MAC。
你应该检查出Boost thread library,尤其是关于condition variables部分。
N-1信号量和互斥的阵列?所有线程获取互斥锁,包含一个计数器,如果小于N,则释放互斥锁并在[counter]处等待信号量数组。第N个线程发现计数器为N,信号所有的信号量时,计数器复位到0时,执行“B”释放互斥并退出。其他线程在释放时也执行B,但不能循环并重新进入,直到第N个线程执行'B'并释放互斥锁。
所有多任务操作系统有信号灯/互斥。你可以使用一个事件,如果可用的话,而不是信号量。
事实上,一个信号量[n-1]次将会很好 - 不像事件那样,没有信号量的数组。 –
只有昨天** [Bartosz Milewski在C++ 11 Concurrency Series上发布了他的视频:9.条件变量](http://bartoszmilewski.wordpress.com/2011/11/13/c11-concurrency-series-9 -condition变量/)**。我发现它是系列中最具娱乐性的(不需要首先查看其他人,我认为) – sehe