互斥的实现方式——软件方式
Peterson Algorithm是第一个实现互斥锁的算法,可以控制两个进程访问一个共享资源而不会发生访问冲突。算法由Gary Peterson于1981年提出。
Peterson算法是基于双线程互斥访问的LockOne与LockTwo算法而来。 LockOne算法使用一个flag布尔数组,LockTwo使用一个turn的整型量,都实现了互斥,但是都存在死锁的可能。Peterson算法把这两种算法结合起来,完美地用软件实现了双线程互斥问题。

该算法使用两个控制变量flag与turn
其中flag[n]的值为真,表示ID号为n的进程希望进入该临界区
变量turn保存有权访问共享资源的进程的ID号

进程Pi:
do{
	flag[i]=true;//进程Pi希望进入该临界区
	turn=j;//进程Pj有权访问共享资源
	while(flag[j]&&turn==j);//如果进程Pj有权访问共享资源且它想要访问临界区 则 进程Pi要等待Pj访问结束 
	//临界区
	flag[i]=false;//进程Pi访问临界区结束 
} while(true);

同理:

进程Pj:
do{
	flag[j]=true;//进程Pj希望进入该临界区
	turn=i;//进程Pi有权访问共享资源
	while(flag[i]&&turn==i);//如果进程Pi有权访问共享资源且它想要访问临界区 则 进程Pj要等待Pi访问结束 
	//临界区
	flag[j]=false;//进程Pj访问临界区结束 
}while(true);
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐