Semaforas – tai sinchronizacijos įrankis, valdantis prieigą prie bendrų išteklių ar kritinių sekcijų daugialypės gijos ar procesų aplinkoje. Jis veikia kaip skaitiklis su dviem pagrindinėmis operacijomis:
1. P() (arba `wait()`): Sumažina skaitiklį. Jei jis tampa neigiamas, gija blokuojama.
2. V() (arba `signal()`): Padidina skaitiklį. Jei yra blokuotų gijų, atblokuoja vieną.
Pagrindinės rūšys:
- Dvejetainis semaforas (mutex): Vertės 0 arba 1, naudojamas vieno ištekliaus apsaugai.
- Skaičiuojamasis semaforas: Leidžia ribotą skaičių gijų vienu metu pasiekti išteklius.
Pavyzdžiai:
1. Dvejetainis semaforas (prieiga prie failo):
c
semaforas = 1; // Prieinama
P(semaforas); // Užima išteklius
// Kritinė sekcija: rašymas į failą
V(semaforas); // Atlaisvina
2. Skaičiuojamasis semaforas (ribotas ryšys):
c
semaforas = 3; // Leidžia 3 gijoms vienu metu
P(semaforas); // Sumažina skaitiklį
// Naudoja ryšį
V(semaforas); // Atlaisvina vietą
Praktinis taikymas: Duomenų bazių ryšiai, gijų sinchronizacija, gamybos/vartojimo problemos.
Jūsų pataisymai bus išsiųsti moderatorių peržiūrai, jei informacija tikslesnė/taisyklingesnė
ji bus patalpinta vietoj esamos.