繁体   English   中英

如何防止死锁?

[英]How do I prevent a deadlock?

我一直在努力解决同步问题。 我有一个进程A,这是主要的进程,还有3个类型B的进程。这些进程必须向A发出信号并等待响应。

A正在等待所有3个信号。 当他们全部到达时,A便完成了工作,并向B发出了所有信号,以便他们继续工作。

A:
   if(/*all signals received*/)  {
     //do my job
     //signal all Bs
   }

B:
   //some code
   signal(A);
   pause();  //wait for response
   //Do other stuff

当B调用signal(A) ,A做他的工作,向B发信号,然后再次调度B,使B调用pause()并无限期地等待信号。 我不知道如何防止这种僵局。

还有其他方法可以做到这一点吗?

考虑使用信号量作为IPC同步,
任何想要发送信号的过程都必须锁定信号量,
并在收到A的退货后,将其解锁,以便继续进行下一步。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM