7

这是我的问题的简化版本。

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

A -> B -> C -> A -> B -> C -> A -> B -> .......

我希望所有线程同时执行指令B,即只有当所有线程都到达B时,任何线程才应该开始执行B。所以,如果有一个线程已经执行了B-> C-> A,它应该在这里等到其他线程也准备好执行 B.

如果可能,请告诉我一个适用于 Windows 和 MAC 的便携式解决方案。

4

2 回答 2

4

您应该查看Boost 线程库,尤其是关于条件变量的部分。

于 2011-11-14T13:14:52.887 回答
0

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

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

于 2011-11-14T13:21:28.587 回答