ANSI C编写的Peterson解法
抽象化表示如下:
其中,turn是共享资源,两进程会进行抢夺。intertest[2]看似是共享资源,但intertst[0]只被进程1修改,intertst[1]只被进程2修改,可看作他们的私有资源。
该算法核心原理是:“每个进程在进入临界区之前,只会修改turn1次”。
假设1:线程1进入临界区之前,线程2不感兴趣。则可直接进入临界区。之后线程2试图使用临界区,首先设置flag,然后修改turn,turn的值保证为2,线程2阻塞。
假设2:线程1进入临界区时,线程2也感兴趣,两个flag均被设置。此时,利用turn只会被修改一次(一共2次)的核心思想,等到turn被修改两次后,允许先修改turn的线程进入。
当线程1运行至while时,确保线程1已修改turn。
1、如果turn=2,则说明两者都进行了修改,线程2对turn值进行覆盖,线程1先行。
2、如果turn=1,有两种可能:线程2未进行修改;线程2已修改,线程1进行了覆盖。
2.1、线程2未修改,很快turn值变为2,线程2覆盖turn值,线程1循环结束,进入临界区
2.2、线程2已修改,表明线程1对turn值进行了覆盖,线程2进入临界区,线程1忙等待。
标签:修改,互斥,临界,线程,进入,Peterson,turn,解法
From: https://www.cnblogs.com/nyjblogs/p/18153802