我有两个进程P1和P2,它们共享3个信号量(s1,s2,s3),每个信号量的初始值为1,还有3个变量(x,y,z)
P1: P2:
wait(s1); wait(s2);
x = x + 1; y = y * 2;
wait(s2); wait(s3);
y = y - x; z = z - y;
wait(s3); signal(s2);
z = x + 2 * y - z; wait(s1);
signal(s3); x = x + 2;
signal(s2); signal(s1);
signal(s1); signal(s3);如果我在一台只有一台中央处理器的计算机上同时运行它们,P1和P2会不会陷入死锁?
我的看法是,一旦它们开始运行,它们就都在等待(),这会导致它们坐着,直到有什么东西向它们发出信号()。既然没有其他东西在运行,那么它们不是都处于死锁状态吗?我觉得我错过了一些非常简单的知识,这阻碍了我的理解。任何洞察力都是值得感谢的!
发布于 2013-03-29 09:08:48
示例中的三个信号量被初始化为1,因此不会在每个进程的第一行阻塞。
现在考虑下面的示例运行:
此时,两个进程都处于死锁状态。
发布于 2013-03-29 09:02:19
当P2等待( s1 )时,s1必须在P1的手中,因此P2不能继续发送信号(S3),然后永远等待P1(S3)。这就是死锁。
发布于 2013-03-29 09:15:02
两种死锁
1)信号(消耗资源)
-每个任务都在等待来自另一个任务的信号-不能退出
2)单位(可重用资源)
信号死锁

最初,信号量a和b都是1。死锁
if P1 and P2 complete their
first wait’s simultaneously before
attempting their second wait’s。
:可能不容易测试信号死锁

可能会导致死锁
if P1 calls T(a,b) and
P2 calls T(b,a) at the same time.https://stackoverflow.com/questions/15694712
复制相似问题