Szinkronizáció

A HupWiki-ből...

A rendszert alkotó folyamatok általában valamilyen közös feladatot oldanak meg és ennek érdekében együttműködnek. Az együttműködés során egymásnak jelzéseket vagy üzeneteket küldenek. Ilyenkor rendszerint vannak a folyamatoknak olyan szakaszaik, amelyekbe csak akkor léphetnek be, ha egy másik folyamattól engedélyt kaptak. Ily módon a folyamatoknak egymással szinkronban kell működniük.

A szinkronizációt megvalósító eszköz bevezetése E.W. Dijkstra nevéhez fűződik. 1968-ban publikálta a szemaforokról szóló cikkét. Tekintsük a definíciót:

Legyen S bináris szemafor két lehetséges értéke 0 (zárt) és 1 (nyitott a szemafor). Az S szemaforon értelmezett P-művelet:

P(S) ==> while S=0 do S:=0; S:=S-1;

A S szemaforon értelmezett V-művelet:

V(S) ==> S:=S+1;

Szemléletes jelentésük a következő: egy folyamat bejelenti erőforrás igényét, kiad egy P() műveletet. Ha az erőforrás foglalt (a szemafor zárt), akkor a folyamat felfüggesztődik. Amikor felszabadul az erőforrás (a szemafor kinyit), a kiadott P() művelettel lezárja a szemafort.

Mind a P(), mind a V() műveletnek oszthatatlannak (primitívnek) kell lennie, ami azt jelenti, hogy végrehajtásuk alatt a folyamattól a processzort nem szabad elvenni.