这是我的问题:
我有一个“引擎”线程,它持续使用资源(由引擎拥有)。其他线程可能想要访问资源,在这种情况下,他们应该告诉引擎暂停并等待它们完成。但是,我不确定使用可用的同步原语实现这一点的最佳方法是什么(假设Windows,但从视角来看,我可能也需要支持其他平台)。
在最简单的情况下,引擎会运行一个循环,进入一个关键部分,做一些工作,并离开该部分。但是,由于关键部分不是先到先服务,因此尝试进入该部分的其他线程可能永远陷入困境。
在我之前的解决方案中,我创建了一个通常发出信号的事件对象,每次进入临界区之前引擎都会等待该事件。另一个线程将重置事件,然后进入该部分,做一些工作,离开该部分并发出事件信号。但是,如果我有多个(其他)线程试图访问资源,这将无效,因为事件对象没有计数器。
我可以简单地使用整数计数器并使用互锁操作递增/递减它,但是然后引擎线程必须等到计数器为零并且循环,这会浪费执行时间。使用整数计数器,事件和临界区的“混合”方法似乎过于复杂,无法成为正确的解决方案。
答案 0 :(得分:0)
我认为最好的解决方案可能是具有“等待零”操作的线程安全计数器。发动机运行如下:
要访问该对象: