한국   대만   중국   일본 
데커의 알고리즘 - 위키百科, 우리 모두의 百科事典 本文으로 移動

데커의 알고리즘

위키百科, 우리 모두의 百科事典.

데커의 알고리즘 (Dekker's algorithm)은 네덜란드의 數學者 테오도루스 데커 相互 排除 를 위해 考案한 病行 프로그래밍 알고리즘 이다. 이 알고리즘은 意思疏通을 위해 共有 메모리 를 使用하여 두 프로세스(또는 스레드)가 하나의 資源을 混亂 없이 共有할 수 있게 한다.

데커의 알고리즘은 檢査 및 調整 (test-and-set) 命令과 같은 原子的 命令이 없는 境遇에도 使用할 수 있으며, 바쁜 待機 (busy waiting) 알고리즘에 屬한다.

紹介 [ 編輯 ]

이 알고리즘은 두 프로세스가 同時에 臨界 領域 에 들어가려고 할 때 하나만 들어가도록 한다. 한 프로세스가 이미 臨界 領域에 있다면, 다른 프로세스는 前 프로세스가 끝나기를 기다려야 한다.

f0과 f1 두 個의 플래그(各各 임계영驛에 들어갈 意向, 두 프로세스 사이의 優先權을 나타낸다)를 使用하여 具現할 수 있다.

醫師 코드 [ 編輯 ]

f0 ← false
f1 ← false
turn ← 0   // or 1

 p0:                                 p1:
     f0 ← true                         f1 ← true
     
while
 f1 {                          
while
 f0 {
         
if
 turn ≠ 0 {                      
if
 turn ≠ 1 {
             f0 ← false                         f1 ← false
             
while
 turn ≠ 0 {                  
while
 turn ≠ 1 {
             }                                   }
             f0 ← true                          f1 ← true
         }                                   }
     }                                    }

    // 臨界 區域                          // 臨界 區域 
    ...                                   ...
    // 나머지 區域                        // 나머지 區域
   turn ← 1                             turn ← 0
   f0 ← false                           f1 ← false

같이 보기 [ 編輯 ]