Peterson算法是一種用於實現進程或執行緒間互斥訪問共享資源的算法,特別適用於兩個進程或執行緒的情況。
該算法使用兩個共享變數,一個布爾型的flag數組和一個整型的turn變數。其中,flag數組用於表示各個進程是否想要進入臨界區,turn變數則用於表示想要進入臨界區的進程的標識。
Peterson算法的工作原理如下:
進程Pi想要進入臨界區時,會設定flag[i]為真,並將turn設定為j(i和j代表兩個不同的進程標識符)。
然後,進程Pi進入一個while循環,該循環會持續執行,直到flag[j]為真且turn等於j。這兩個條件確保了當進程Pi進入臨界區時,進程Pj不會同時進入。
當進程Pi離開臨界區時,它會將flag[i]重置為假,允許進程Pj進入臨界區。
Peterson算法的優點包括避免單標誌法的交替訪問限制和雙標誌法後檢驗的「飢餓」問題。它通過巧妙地使用flag數組和turn變數,實現了兩個進程對共享資源的互斥訪問,同時滿足了進入條件和有限等待要求,有效地解決了臨界區問題。