[英]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.