Кіріспе

Питерсон алгоритмі (немесе Питерсон шешімі) – бірнеше процестерге жалғыз қолданылатын ресурсты қақтығыссыз бөлісуге мүмкіндік беретін, бір мезгілде орындалатын бағдарламалау алгоритмі. Бұл алгоритмде процестер тек ортақ жад арқылы байланысады. Оны 1981 жылы Гэри Л. Петерсон жасаған. Питерсоннің бастапқы нұсқасы екі процесс үшін ғана жұмыс істесе, алгоритмді одан да көп процесске бейімдеуге болады.

Өзара шектеу

P0 және P1 бір уақытта критикалық бөлімде бола алмайды. Егер P0 критикалық бөлімінде болса, онда flag[0] – рас. Сонымен қатар, flag[1] жалған (яғни P1 критикалық бөлімінен шығып кеткен), немесе turn 0-ге тең (яғни P1 қазір критикалық бөлімге кіруге тырысып жатыр, бірақ ықыласты күтуде), немесе P1 – P1 қақпасында (flag[1] рас деп белгіленгеннен кейін, бірақ turn 0-ге белгіленбес бұрын және босқа күту кезінде критикалық бөлімге кіруге тырысуда). Егер екі процесс те критикалық бөлімдерінде болса, онда күй flag[0] және flag[1] шарттарын, сондай-ақ turn = 0 және turn = 1 теңдіктерін қанағаттандыруы керек деп қорытындылаймыз. Бірақ бірде-бір күй turn = 0 және turn = 1 теңдіктерін бірдей қанағаттандыра алмайды, демек екі процесс те критикалық бөлімдерінде болатын күй болуы мүмкін емес. (Бұл Schneider 1997 жұмысында дәлелденген аргументті қайталайды.)

Ескерту

Жабдық деңгейінде жұмыс істегенде Питерсон алгоритмі, әдетте, атомдық қол жеткізуді қамтамасыз ету үшін қажет емес. Кейбір процессорларда арнайы нұсқаулар бар, мысалы, «тест және орнату» немесе «салыстыру және алмастыру», олар жад шинасын құлыптау арқылы SMP жүйелерінде өзара ажыратуды қамтамасыз етуге пайдаланылуы мүмкін. Көптеген қазіргі заманғы процессорлар орындау тиімділігін арттыру үшін жадқа қол жеткізуді қайта реттейді (рұқсат етілген жадты реттеу түрлері туралы жад реттілігін қараңыз). Мұндай процессорлар, әдетте, жад кедергісі нұсқаулары арқылы жадқа қатынастар тізбегінде реттілікті күштеудің бір жолын ұсынады. Жадқа қатынастарды қайта реттейтін процессорларда Питерсон және оған байланысты алгоритмдерді дұрыс жұмыс істеуі үшін, әдетте, осындай операцияларды пайдалану қажет, бұл реттілік операциялардың дұрыс емес ретпен орындалуына жол бермейді. Жадыға қол жеткізуді қайта реттеу тіпті нұсқауларды қайта реттемейтін процессорларда да болуы мүмкін екенін ескеріңіз (мысалы, Xbox 360-тағы PowerPC процессоры). Мұндай процессорлардың көпшілігі сондай-ақ, x86 процессорларындағы XCHG сияқты, кепілдірілген атомдық операцияға ие, сонымен қатар Alpha, MIPS, PowerPC және басқа архитектуралардағы «жүктеу сілтемесі / сақтау шарты» операциялары бар. Бұл нұсқаулар таза ортақ жад тәсілдерімен салыстырғанда тиімдірек синхрондау примитивтерін құруға арналған.