我有一个解决餐饮哲学家问题的任务。我已经实现了程序的逻辑(由于测试它是正确的)。
然而,由于有大量的哲学家(> 2000线程)和短暂的工作时间(5秒),这变得不公平,最初的哲学家比哲学家吃的频率更高。我认为原因是按照开启的顺序。我的实现基于mutex
和std::atomic
,以避免主动等待(不断尝试trylock()
)我放置wait(sleep_time)
。
第一个问题,如果我的实现基于条件变量会更快吗?
Secon问题,如何避免因启动大量线程所需的时间而导致的不公平行为?以随机顺序启动它们?