Peterson算法是一个实现互斥锁的并发程序设计算法,可以控制两个线程访问一个共享的单用户资源而不发生访问冲突。Gary L. Peterson于1981年提出此算法。
算法概要
/*
两个全局共享的状态变量flag[0]和flag[1],表示临界区状态及哪个进程正在占用临界区。
全局共享变量turn(值为1或0)表示能进入临界区的进程序号。
*/
实现方法
boolean flag[2];
int turn;
void procedure0()
{
while(true)
{
flag[0]=true;
turn=1;
while(flag[1]&&turn==1) /*若flag[1]为false,P0就进入临界区;若flag[1]为tureP0循环等待,只要P1退出临界区,P0即可进入*/
{
/* donothing*/
}
visit();/*访问临界区*/