Concurrent Processing - Petersons Algorithm
For those unfamiliar, the following is Peterson's algorithm used for process coordination:
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
}
My question is, can this algorithm give rise开发者_运维知识库 to deadlock?
No, there is no deadlock possible.
The only place you are waiting is while
loop. And the process
variables is not shared between threads and they are different, but turn
variable is shared. So it's impossible to get true
condition for turn == process
for more then one thread in every single moment.
But anyway your solution is not correct at all, the Peterson's algorithm is only for two concurrent threads, not for any No_Of_Processes
like in your code.
In original algorithm for N
processes deadlocks are possible link.
精彩评论