Semaforas prieš Mutex
Semaforas yra duomenų struktūra, kuri naudojama siekiant užtikrinti, kad keli procesai lygiagrečioje programavimo aplinkoje nepasiektų bendro ištekliaus ar svarbios dalies tuo pačiu metu. Semaforai naudojami siekiant išvengti negyvų spynų ir lenktynių sąlygų. Mutex (abipusio išskyrimo objektas) taip pat naudojamas siekiant išvengti kelių vienu metu vykstančių procesų prieigos prie bendro š altinio.
Kas yra semaforas?
Semaforas yra duomenų struktūra, naudojama siekiant užtikrinti abipusį kritinių skyrių išskyrimą. Semaforai daugiausia palaiko dvi operacijas, vadinamas laukimu (istoriškai žinomas kaip P) ir signalą (istoriškai žinomas kaip V). Laukimo operacija blokuoja procesą, kol bus atidarytas semaforas, o signalo operacija leidžia įeiti kitam procesui (gijai). Kiekvienas semaforas yra susietas su laukiančių procesų eile. Kai laukimo operacija iškviečiama gija, jei semaforas atidarytas, giją galima tęsti. Jei semaforas uždaromas, kai gija iškviečia laukimo operaciją, gija užblokuojama ir ji turi laukti eilėje. Signalo operacija atidaro semaforą ir jei eilėje jau laukia gija, tam procesui leidžiama tęstis ir jei eilėje nėra laukiančių gijų, signalas įsimenamas kitoms gijomis. Yra dviejų tipų semaforai, vadinami mutex semaforais ir skaičiavimo semaforais. „Mutex“semaforai suteikia vieną prieigą prie š altinio, o skaičiuojant semaforus kelioms gijomis galima pasiekti š altinį (kuris turi keletą galimų vienetų).
Kas yra Mutex?
Kai paleidžiama kompiuterio programa, ji sukurs mutex ir pridės jį prie š altinio. Kai išteklius naudoja gija, jis užrakinamas ir kitos gijos negali jo naudoti. Jei kita gija nori naudoti tą patį š altinį, ji turės pateikti užklausą. Tada ta gija bus įtraukta į eilę, kol pirmoji gija bus baigta naudoti išteklius. Kai pirmoji gija bus baigta naudoti išteklius, užraktas bus pašalintas ir eilėje laukianti gija galės pasiekti š altinį. Jei eilėje laukia kelios gijos, joms suteikiama prieiga besikeičiant. Praktiškai, kai mutex kaitalioja prieigą prie resurso tarp kelių gijų, tai bus matoma, nes kelios gijos naudoja išteklius vienu metu. Tačiau viduje tik viena gija tam tikru metu pasiekia š altinį.
Kuo skiriasi Semaforas ir Mutex?
Nors ir semaforai, ir mutex objektai yra naudojami siekiant abipusio išskyrimo lygiagrečiose programavimo aplinkose, jie turi tam tikrų skirtumų. Mutex objektas leidžia tik vienai gijai sunaudoti išteklius arba kritinę sekciją, o semaforai leidžia vienu metu pasiekti išteklius ribotam skaičiui (neviršijant didžiausio leistino skaičiaus). Naudojant mutex objektus, kitos gijos, norinčios pasiekti š altinį, turi laukti eilėje, kol dabartinė gija bus baigta naudoti išteklius.