Semafors vs Monitor
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. Monitors ir programmēšanas valodas konstrukcija, kuru izmanto arī, lai vienlaikus izvairītos no vairākiem procesiem, kuri vienlaikus piekļūst kopējam resursam, tāpēc garantē savstarpēju izslēgšanu. Monitori izmanto nosacītus mainīgos, lai sasniegtu šo uzdevumu.
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 monitors?
Monitors ir programmēšanas valodas konstrukts, ko izmanto, lai kontrolētu piekļuvi koplietotajiem datiem. Monitori iekapsulē dalītās datu struktūras, procedūras (kas darbojas ar kopīgām datu struktūrām) un sinhronizāciju starp vienlaicīgiem procedūras izsaukumiem. Monitors pārliecinās, ka tā datiem nav jāsaskaras ar nestrukturētu piekļuvi, un garantē, ka pakāpieni (kas piekļuvi monitora datiem ar savu procedūru palīdzību) likumīgā veidā mijiedarbojas. Monitors garantē savstarpēju izslēgšanu, atļaujot tikai vienu pavedienu, lai noteiktā laikā veiktu jebkuru monitora procedūru. Ja cits pavediens mēģina izsaukt metodi monitorā, kamēr pavediens jau veic procedūru monitorā, tad otrā procedūra tiek bloķēta, un tai jāgaida rindā. Ir divu veidu monitori, kurus sauc par Hoare monitoriem un Mesa monitoriem. Tie galvenokārt atšķiras pēc plānošanas semantikas.
Kāda ir atšķirība starp Semaphore un Monitor?
Kaut arī gan semaforus, gan monitorus izmanto, lai panāktu savstarpēju izslēgšanu paralēlās programmēšanas vidēs, tie atšķiras ar paņēmieniem, kas izmantoti šī uzdevuma sasniegšanai. Monitoros kods, kas tiek izmantots savstarpējas izslēgšanas panākšanai, atrodas vienuviet un ir strukturētāks, savukārt semaforu kods tiek sadalīts kā gaidīšanas un signāla funkcijas izsaukumi. Īstenojot semaforus, ir arī ļoti viegli kļūdīties, savukārt, ieviešot monitorus, ir ļoti maza iespēja kļūdīties. Turklāt monitori izmanto stāvokļa mainīgos, savukārt semafori to neizmanto.