Bash Pagina 112

De la Wiki Linux Advanced
Versiunea din 30 octombrie 2024 17:57, autor: Admin (discuție | contribuții) (→‎Blocare Exclusivă vs. Blocare Partajată)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)
Sari la navigare Sari la căutare

Blocare Exclusivă vs. Blocare Partajată

Blocările de fișiere sunt utile pentru a controla accesul la resurse partajate și pentru a preveni condițiile de cursă. Există două tipuri principale de blocări în Linux: **blocare exclusivă** și **blocare partajată**.

  • Blocare Exclusivă (Exclusive Lock)

O blocare exclusivă permite unui singur proces accesul la resursa blocată. Orice alt proces care încearcă să acceseze această resursă va trebui să aștepte până când blocarea este eliberată.

Exemplu de Blocare Exclusivă:

În acest exemplu, scriptul deschide un fișier și aplică o blocare exclusivă. Dacă blocarea nu poate fi obținută, scriptul va ieși.

#!/bin/bash
# Deschidem descriptorul 200 pentru fișierul de blocare
exec 200>/var/tmp/exclusivelock.lock || exit 1
# Aplicați o blocare exclusivă
flock -x 200 || exit 1
echo "Am obținut blocarea exclusivă. Execut codul protejat."
sleep 30  # Simulăm o operațiune lungă
# Blocarea este eliberată automat la ieșirea din script

În exemplul de mai sus: -x în flock -x 200 reprezintă blocarea exclusivă.

Dacă un alt proces încearcă să obțină blocarea, acesta va trebui să aștepte până când resursa este eliberată.

  • Blocare Partajată (Shared Lock)

O blocare partajată permite mai multor procese să acceseze în paralel resursa, dar toate trebuie să o acceseze doar pentru citire. Blocările partajate sunt utile când mai multe procese au nevoie de acces simultan la resursă fără a o modifica.

Exemplu de Blocare Partajată:

În acest exemplu, scriptul deschide un fișier și aplică o blocare partajată, permițând accesul în paralel altor procese care au nevoie de aceleași permisiuni.

#!/bin/bash
# Deschidem descriptorul 300 pentru fișierul de blocare
exec 300>/var/tmp/sharedlock.lock || exit 1
# Aplicați o blocare partajată
flock -s 300 || exit 1
echo "Am obținut blocarea partajată. Execut codul în mod partajat."
sleep 10  # Simulăm citirea resursei
# Blocarea este eliberată automat la ieșirea din script

În exemplul de mai sus: -s în flock -s 300 reprezintă blocarea partajată.

Orice alt proces care solicită o blocare partajată poate accesa resursa în paralel, dar procesele care solicită o blocare exclusivă vor aștepta.

Rezumat

  • Blocare Exclusivă (-x): permite unui singur proces să acceseze resursa. Este necesară pentru operațiunile de scriere.
  • Blocare Partajată (-s): permite accesul simultan pentru mai multe procese, dar numai pentru operațiuni de citire.

Blocările exclusivă și partajată pot fi esențiale pentru gestionarea corespunzătoare a concurenței într-un sistem multi-proces, reducând riscurile de inconsistență a datelor și asigurând accesul controlat la resurse.


Această secțiune explică tipurile de blocări și oferă exemple clare pentru fiecare caz.


Pagina anterioară | Următoarea pagină