对于那些不熟悉的人,以下是Peterson用于过程协调的算法:
int No_Of_Processes; // Number of processes
int turn; // Whose turn is it?
int interested[No_Of_Processes]; // All values initially FALSE
void enter_region(int process) {
int other; // number of the other process
other = 1 - process; // the opposite process
interested[process] = TRUE; // this process is interested
turn = process; // set flag
while(turn == process && interested[other] == TRUE); // wait
}
void leave_region(int process) {
interested[process] = FALSE; // process leaves critical region
}
我的问题是,这种算法会导致死锁吗?
答案 0 :(得分:1)
不,没有死锁可能。
您正在等待的唯一地方是while
循环。并且process
变量不在线程之间共享,它们是不同的,但turn
变量是共享的。因此,对于true
来说,在每一个时刻都有超过一个线程的turn == process
条件是不可能的。
但无论如何,你的解决方案根本不正确,Peterson的算法只针对两个并发线程,而不是代码中的任何No_Of_Processes
。
在N
进程的原始算法中,死锁是可能的link。