条件与信号量同步
condition synchronization with semaphores
我有这个例子,我试图查看语句 运行 的顺序。我相信它会是 X、A、B、Y。
我这样说对吗?我的逻辑是语句 X 运行s 首先与 A 并行,但是当我们到达信号量时,它仍然是 0,因此我们允许语句 B 到 运行 由于信号,因为这会增加值。现在终于可以运行 Y了?
因为进程 运行 是并行的,所以无法确定 X 和 A 的顺序 - 我们可以将其表示为 (X | A) - 这意味着它们中的任何一个都会被执行。
现在,对于信号量:由于进程是并行的,操作顺序又是 (wait (consyn) | signal (consyn),其中不同的结果
如果先执行wait(consyn),再执行signal(consyn),则结果为(X | A) (Y | B),P1和P2结束。如果顺序颠倒并且信号量实现使用信号递增它的值并等待递减,则结果再次是 (X | A) (Y | B),P1 和 P2 结束。
此外,线程执行的顺序不必完全并行,因此结果可以是 (X, Y)、(A, B) 和 (A, Y - 保证信号量)被保留。
关于语句的顺序,您几乎无话可说。您有订单 X / wait / Y。您有订单 A / signal / B。您有订单 signal / Y。仅此而已。如果您对只是工具的等待/信号不感兴趣,那么 Y 在 A 之后执行,这就是您所知道的。
P2 可以运行 在P1 的第一条语句执行之前完全结束。
我有这个例子,我试图查看语句 运行 的顺序。我相信它会是 X、A、B、Y。
我这样说对吗?我的逻辑是语句 X 运行s 首先与 A 并行,但是当我们到达信号量时,它仍然是 0,因此我们允许语句 B 到 运行 由于信号,因为这会增加值。现在终于可以运行 Y了?
因为进程 运行 是并行的,所以无法确定 X 和 A 的顺序 - 我们可以将其表示为 (X | A) - 这意味着它们中的任何一个都会被执行。
现在,对于信号量:由于进程是并行的,操作顺序又是 (wait (consyn) | signal (consyn),其中不同的结果
如果先执行wait(consyn),再执行signal(consyn),则结果为(X | A) (Y | B),P1和P2结束。如果顺序颠倒并且信号量实现使用信号递增它的值并等待递减,则结果再次是 (X | A) (Y | B),P1 和 P2 结束。
此外,线程执行的顺序不必完全并行,因此结果可以是 (X, Y)、(A, B) 和 (A, Y - 保证信号量)被保留。
关于语句的顺序,您几乎无话可说。您有订单 X / wait / Y。您有订单 A / signal / B。您有订单 signal / Y。仅此而已。如果您对只是工具的等待/信号不感兴趣,那么 Y 在 A 之后执行,这就是您所知道的。
P2 可以运行 在P1 的第一条语句执行之前完全结束。