Semafors pret Mutex
Semafors ir datu struktūra, ko izmanto, lai nodrošinātu, ka vairāki procesi vienlaikus nepiekļūst kopējam resursam vai kritiskai sadaļai paralēlās programmēšanas vidēs. Semafori tiek izmantoti, lai izvairītos no mirušām slēdzenēm un sacensību 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 vienlaicīgiem procesiem.
Kas ir semafors?
Semafors ir datu struktūra, ko izmanto, lai nodrošinātu savstarpēju izslēgšanu kritiskās sadaļās. Semafori galvenokārt atbalsta divas darbības, ko sauc par gaidīšanu (vēsturiski pazīstama kā P) un signālu (vēsturiski pazīstama kā V). Gaidīšanas darbība bloķē procesu, līdz tiek atvērts semafors, un signāla darbība ļauj ievadīt citu procesu (pavedienu). Katrs semafors ir saistīts ar gaidīšanas procesu rindu. Kad gaidīšanas darbību izsauc pavediens, ja semafors ir atvērts, pavediens var turpināties. Ja semafors tiek aizvērts, kad pavediens izsauc gaidīšanas darbību, pavediens tiek bloķēts un tam jāgaida rindā. Signāla darbība atver semaforu un, ja rindā jau gaida pavediens, šis process var turpināties un, ja rindā nav gaidošu pavedienu, signāls tiek atcerēts nākamajiem pavedieniem. Ir divu veidu semafori, ko sauc par mutex semaforiem un skaitīšanas semaforiem. Mutex semafori nodrošina vienu 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 datora lietojumprogramma tiek startēta, tā izveidos mutex un pievienos to resursam. Kad resurss tiek izmantots pavedienam, 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. Pēc tam š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ēs piekļūt resursam. Ja rindā gaida vairāki pavedieni, tiem tiek piešķirta piekļuve rotācijas kārtībā. Praktiski, kad mutex maina piekļuvi resursam starp vairākiem pavedieniem, tas būs redzams, jo vairāki pavedieni vienlaikus patērē resursu. Taču iekšēji resursam noteiktā laikā piekļūst tikai viens pavediens.
Kāda ir atšķirība starp Semaforu un Mutex?
Lai gan semafori un mutex objekti tiek izmantoti, 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 kritisku sadaļu, turpretim semafori ļauj ierobežotam skaitam vienlaicīgu piekļuvi resursam (zem maksimāli pieļaujamā skaita). Izmantojot mutex objektus, citiem pavedieniem, kas vēlas piekļūt resursam, ir jāgaida rindā, līdz pašreizējais pavediens ir pabeigts, izmantojot resursu.