并发处理 - Petersons算法

时间:2011-05-15 13:16:47

标签: deadlock concurrent-programming

对于那些不熟悉的人,以下是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
}

我的问题是,这种算法会导致死锁吗?

1 个答案:

答案 0 :(得分:1)

不,没有死锁可能。 您正在等待的唯一地方是while循环。并且process变量不在线程之间共享,它们是不同的,但turn变量是共享的。因此,对于true来说,在每一个时刻都有超过一个线程的turn == process条件是不可能的。 但无论如何,你的解决方案根本不正确,Peterson的算法只针对两个并发线程,而不是代码中的任何No_Of_Processes。 在N进程的原始算法中,死锁是可能的link