Semafors pret monitoru
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. Monitors ir programmēšanas valodas konstrukcija, kas tiek izmantota arī, lai izvairītos no vairākiem procesiem vienlaikus piekļūt kopējam resursam, tādējādi garantējot savstarpēju izslēgšanu. Lai izpildītu šo uzdevumu, monitori izmanto nosacījumu mainīgos.
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 monitors?
Monitors ir programmēšanas valodas konstrukcija, ko izmanto, lai kontrolētu piekļuvi koplietotiem datiem. Monitori iekapsulē koplietotas datu struktūras, procedūras (kas darbojas ar kopīgām datu struktūrām) un sinhronizāciju starp vienlaicīgām procedūru izsaukumiem. Monitors nodrošina, ka tā datiem netiek pieļauta nestrukturēta piekļuve, un garantē, ka protektori (kas piekļūst monitora datiem, izmantojot savas procedūras) mijiedarbojas leģitīmā veidā. Monitors garantē savstarpēju izslēgšanu, ļaujot tikai vienam pavedienam veikt jebkuru monitora procedūru noteiktā laikā. Ja cits pavediens mēģina izsaukt metodi monitorā, kamēr pavediens monitorā jau izpilda procedūru, tad otrā procedūra tiek bloķēta un tai jāgaida rindā. Ir divu veidu monitori ar nosaukumu Hoare monitori un Mesa monitori. Tie galvenokārt atšķiras ar plānošanas semantiku.
Kāda ir atšķirība starp semaforu un monitoru?
Lai gan semafori un monitori tiek izmantoti, lai panāktu savstarpēju izslēgšanu paralēlās programmēšanas vidēs, tie atšķiras pēc šī uzdevuma veikšanas izmantotajām metodēm. Monitoros kods, kas tiek izmantots, lai panāktu savstarpēju izslēgšanu, atrodas vienuviet un ir vairāk strukturēts, savukārt semaforu kods tiek izplatīts kā gaidīšanas un signāla funkciju izsaukumi. Turklāt ir ļoti viegli kļūdīties, ieviešot semaforus, savukārt, ieviešot monitorus, ir ļoti maza iespēja kļūdīties. Turklāt monitori izmanto nosacījumu mainīgos, bet semafori ne.