C持有许多线程

我是C(在
Windows上)和线程的新手,我正在尝试使用互斥锁,信号量和事件找到我的问题的解决方案.

我正在尝试使用构造函数和名为Enter的方法创建一个Barrier类.具有唯一方法Enter的Barrier类应该阻止任何进入它的线程,直到许多线程已经到达该方法.在构造函数中收到的等待它的线程数.

我的问题是如何使用锁来创建该效果?我需要的是像一个反转信号,保存线程,直到计数已达到,而不是像常规的信号作品,让线程,直到达到计数.

关于如何解决这个问题的任何想法都会很棒.

谢谢,

Netanel. 最佳答案 也许:

在ctor中,存储限制计数并创建一个空信号量.

当一个线程调用Enter时,首先锁定一个互斥锁,这样你就可以安全地旋转内部.将线程数计入限制计数.如果尚未达到限制,请释放互斥锁并等待信号量.如果达到限制,则在循环中发出信号量[limit-1]次信号,将线程数归零(准备下次),释放互斥锁并从Enter()返回.任何正在等待信号量并且现在准备好/正在运行的线程应该从他们的“Enter”调用返回.

互斥锁可防止任何已释放的线程从“再次进入”循环,直到所有调用“Enter”并等待的线程都已设置为运行并且屏障被重置.

点赞