Semafors vs Mutex
Semafors ir datu struktūra, kuru izmanto, lai paralēlās programmēšanas vidēs pārliecinātos, vai vairāki procesi vienlaikus nepiekļūst kopējam resursam vai kritiskai sadaļai. Semaforus izmanto, lai izvairītos no mirušām slēdzenēm un sacīkšu apstākļiem. Mutex (savstarpējās izslēgšanas objekts) tiek izmantots arī, lai izvairītos no piekļuves kopējam resursam vienlaikus ar vairākiem vienlaikus procesiem.
Kas ir semafors?
Semafors ir datu struktūra, kuru izmanto, lai nodrošinātu kritisku sadaļu savstarpēju izslēgšanu. Semafori galvenokārt atbalsta divas operācijas, kuras sauc par nogaidīšanu (vēsturiski pazīstamu kā P) un signālu (vēsturiski zināmu kā V). Gaidīšanas operācija bloķē procesu, līdz semafors ir atvērts un signāla darbība ļauj ienākt citam procesam (pavedienam). Katru semaforu saista ar gaidīšanas procesu rindu. Kad pavediens izsauc gaidīšanas operāciju, ja semafors ir atvērts, pavediens var turpināties. Ja semafors ir aizvērts, kad gaidīšanas operāciju izsauc pavediens, pavediens tiek bloķēts, un tam jāgaida rindā. Signāla darbība atver semaforu, un, ja rindā jau tiek gaidīts pavediens, šim procesam tiek ļauts turpināties, un, ja rindā nav pavedienu, signāls tiek atcerēts par nākamajiem pavedieniem. Ir divu veidu semaforas, ko sauc par mutex semaforām un skaitīšanas semaforām. Mutex semafori nodrošina vienotu piekļuvi resursam, un semaforu skaitīšana ļauj vairākiem pavedieniem piekļūt resursam (kuram ir pieejamas vairākas vienības).
Kas ir Mutex?
Kad tiek startēta datora lietojumprogramma, tā izveidos mutex un pievienos to resursam. Kad pavedienu izmanto resurss, tas tiek bloķēts, un citi pavedieni to nevar izmantot. Ja cits pavediens vēlas izmantot to pašu resursu, tam būs jāiesniedz pieprasījums. Tad šis pavediens tiks ievietots rindā, līdz pirmais pavediens tiks pabeigts ar resursu. Kad pirmais pavediens ir pabeigts ar resursu, bloķēšana tiks noņemta, un pavediens, kas gaida rindā, var piekļūt resursam. Ja rindā gaida vairāki pavedieni, tiem tiek piešķirta rotējoša pieeja. Praktiski, kad mutex pāriet piekļuvi resursam starp vairākiem pavedieniem, tas būs redzams, jo vairāki pavedieni vienlaikus patērē resursu. Bet iekšēji resursam noteiktā laikā piekļūst tikai viens pavediens.
Kāda ir atšķirība starp Semaforu un Mutex?
Kaut arī gan semaforus, gan mutex objektus izmanto, lai panāktu savstarpēju izslēgšanu paralēlās programmēšanas vidēs, tiem ir dažas atšķirības. Mutex objekts ļauj tikai vienam pavedienam patērēt resursu vai kritisko sadaļu, turpretī semafori ļauj ierobežotam vienlaicīga piekļuves skaitam resursam (ar maksimālo pieļaujamo skaitu). Izmantojot mutex objektus, citiem pavedieniem, kuri vēlas piekļūt resursam, jāgaida rindā, līdz pašreizējais pavediens tiek pabeigts, izmantojot resursu.