好吧,所以给出这个图必须用信号量的最小数字 实现,我想知道什么时候边被认为是多余的,应该是 删除,在我的例子中可以从边(2)到(5)被认为是多余的(为什么) 我还必须指定该图不是循环的,并且不能使用cobegin-coend构造带信号量的优先图
所以我的困境绕过冗余边缘,因为修改我的解决方案,直到现在我认为 (2) - (5)可以保留,我会按以下顺序划分信号量:
s1 (from 1 to 2 , 3 and 5)
s2 (from 2 and 3 to 4)
s3 (from 1 , 2 and 3 to 5)
s4 (from 3 , 4 and 5 to 6)
@karmastan 考虑旗语原语信号()和等待(),并考虑该曲线图(1) - S1 - >(2)因此,以到达(2)应该使用信号量“S1”从边缘(1)(2),您必须首先执行(1),这样的代码会是这样的
1 : 2:
do (1) wait(s1) //waits for the signal from 1
signal(s1)//1 has finished do (2)
@让 - 伯纳德 我明白,如果我得到的概念正确,在这个例子中“虚线”边缘 将被考虑在相互排斥中(除了通常的信号量impl EMENT也是一个互斥体)
因此我应该删除:
(1)---->(6) //because it's a "cross" edge
(3)---->(6) // also because it's a "cross" and excludes (3)--->(5)
那么我将有6个信号灯,我有一个互斥
s1 (from 1 to 2)
s2 (from 1 to 3)
s3 (from 1 to 4)
s4 (from 2 and 3 to 5)
s5 (from 4 and 5 to 6)
s6 (from 6 to 1)
mutex(between 2 and 4)
如果您可以备份一下,用信号量实现部分订单意味着什么? – Karmastan
考虑信号量原语signal()和wait()并考虑这个图(1) - s1→(2)因此到达(2)您应该在(1)的边上使用信号量“s1”到(2),并且你必须首先执行(1),所以代码将类似于 1:2: do(1)wait(s1)//等待来自1的信号 signal(s1)// 1 has (2) 还要考虑1和2执行一段时间(1)周期 –
因此,此图中的每个节点都表示一个任务,并且您希望每个任务按图定义的顺序执行。你想通过使用信号量来执行这个命令,并且你正在问如何使用最少数量的信号量来做到这一点。这是正确的吗? – Karmastan