Semafor

Iz MaFiRaWiki

Semaforji so sinhronizacijsko orodje in klasična metoda za zaklepanje in pravilno deljenje virov med različnimi procesi v večprocesnem okolju. Uporabljajo se predvsem za reševanje problema kritične sekcije pri bolj kompleksnih sistemih oz. problemih. Semafor je celoštevilčna spremenljivka, katero lahko spreminjano samo preko dveh atomarnih operacij: wait(S) in signal(S).

     Definicija wait(S)                              Definicija signal(S)
      
       wait(S) {                                       signal(S)  {
         while (S<=0);                                   S++;
         S--;                                          }
       }

Ko nek proces spremeni vrednost semaforja, ne sme noben drug proces spreminjati te vrednosti. Enako velja za operacije wait(S) in signal(S), ki morajo biti atomarne – nedeljive, še posebej ko se izvaja operacija S-- ali S++.

Semaforje je leta 1965 izumil Nizozemec Edsger Dijkstra, zato so bile operacije nad semaforji v osnovi poimenovane s črkama P za operacijo wait(S) oz. down(S) (v nizozemščini »proberen« - testirati) in V za operacijo signal(S) oz. up(s) (v nizozemščini »verhogen« - inkrementirati). Semaforje lahko uporabimo pri reševanju problema kritičnih sekcij z več – n procesi. Ideja je v temu, da si procesi delijo semafor mutex (mutual exclusions), ki ima začetno vrednost 1. Njegov namen je ščiti del kode, ki ga hkrati ne moreta izvajati dva procesa. Semaforje uporabljamo tudi za sinhronizacijo poteka dveh procesov, kjer zahtevamo, da se en proces konča preden začne drugi izvajati svoje operacije (npr. generiranje povzetka).

Osebna orodja