我目前正在研究一个模拟扩展的Producer-Worker模型的问题.在这个问题中,有3个工人和3个工具可供使用,而对于工人来说,他们需要2个工具(和材料,但那些是无关紧要的).如果保险库中有> = 2个工具,则工作人员将采用2.否则,他们将等待条件变量,当> = 2时将发出信号.
对于2名工人来说这很好:一个工作然后将工具返回到金库,另一个等待工人将被唤醒并使用2个工具.问题是,有3名工人,总会有一个人渴望得到这些工具.
经过一些测试后,我注意到等待条件变量的线程以堆栈形式构建.有没有可能使它排队?(1等待,2等待,3等待.当1被唤醒并想要制造另一个时,他必须在2和3后面等待.)
这是一个示例输出.代码太长,所以如果真的有必要,我会发布它.有3个工作线程和1个工具互斥锁.任何挨饿的人都不同于其他人.
1 Tools taken. Remaining: 1
2 Waiting on tools...
3 Waiting on tools...
1 Operator Product made. Tools returned. Tools now:3
3 Tools taken. Remaining: 1
1 Waiting on tools...
3 Materials returned for switch.
3 Operator Product made. Tools returned. Tools now:3
1 Tools taken. Remaining: 1
3 Waiting on tools...
1 Materials returned for switch.
1 Operator Product made. Tools returned. Tools now:3
3 Tools taken. Remaining: 1
1 Waiting …Run Code Online (Sandbox Code Playgroud)