Mutex vs Notikums
C # ir daudz dažādu vītņu sinhronizācijas opciju. Divas plašāk lietotās ir mutex un event. Tikai kāda ir atšķirība starp šiem diviem? Kurš no tiem ir labāks risinājums?
Notikuma opcija var dot pavedieniem iespēju bloķēt darbību, līdz tiek pārraidīts notikums, tādējādi iegūstot nosaukumu “notikums”. Tas ir tas pats, kas kaut ko gulēt un pamodināt to tikai tad, kad notiek kaut kas nozīmīgs. Notikumi ir atšķirīgi no mutexes, jo mutexes nav signalizācijas opcijas vai funkcijas. Notikumi spēj notīrīt signālu, kad ir pamodies kāds, kurš varēja to gaidīt. Pat API var atļaut iespēju bloķēt, līdz tiek signalizēts viens vai visi dažādi notikumi. Turklāt notikumi ir kodola objekti. Tie nav “vieglāki” salīdzinājumā ar muteksiem. Notikums būtībā ir kodola objekts, kam ir divi stāvokļi. Parasti notikums signalizē par notikuma tuvošanos un dažreiz pat par I / O darbības beigām.
“Mutex” apzīmē savstarpēju izslēgšanu. Tas ir koplietojamo resursu darbības jomas koordinācijas mehānisms. Padomājiet par to kā darījuma veidu. Jums nav jāgaida, lai gan vēlaties piekļūt dažiem koplietotiem resursiem (tikai tādā gadījumā, ja citi jau tam piekļūst), kurus jūs bloķējat. Mutex sastāv no diviem stāvokļiem, kaut arī tas pastāv, lai īstenotu savstarpēju izslēgšanu. Tas ir paredzēts, ja vēlaties aizsargāt koda daļu, kas parasti atjaunina koplietoto resursu no tās daļas, kurā tiek apgalvots mutex, uz daļu, kurā tas tiks izlaists. Tas noved pie tā, ka neviens cits pavediens nevar iziet cauri sadaļai.
Cilvēkiem, kuri mēģināja simulēt notikumu ar mutex palīdzību, nācās saskarties ar problēmu, kurā, tiklīdz tika iegūta slēdzene vai tika paziņots par notikumu, persona visu pārējo uztur līdz brīdim, kad slēdzene tiek atbrīvota. Tas nav signāla notikuma semantika. Pasākums var palikt izlikts, un visiem pavedienu testiem būs pieejama vārtu forma, ja nav slēdzeņu. Starpprocesu sinhronizācijai uzticētais Mutex atrodas kodola režīma objektā. Notikumi daudzpavedienu sinhronizēšanai ar vienu metodi ir lietotāja režīma objektā.
Mutex objekts ir pārāk smags un pārāk vispārīgs. Pasākumu objekti ir daudz vieglāki. Lietotāja režīma sinhronizācija tiek izmantota lielākajā daļā situāciju tāpēc, ka tā nodrošina mazāk CPU ciklu. Mutex ļoti līdzinās kritiskai sadaļai, un to izmanto, lai sinhronizētu piekļuvi koplietotajiem resursiem. Notikumiem ir pilnīgi atšķirīga funkcija, jo tos izmanto, lai sinhronizētu uzdevumus vai pārvaldītu uzdevumu plānošanu dažiem cilvēkiem.
Notikumi vairāk ir nosacījuma mainīgie, atšķirībā no Mutex, kas vairāk līdzinās a
monitoru kādā no terminoloģijām, vai arī tas var būt tradicionāls semafora / muteksa veids.
Kopsavilkums:
1. Pasākuma opcija var dot pavedieniem iespēju bloķēt darbību, līdz tiek pārraidīts notikums, tādējādi nosaukums “notikums”.
2.Ancients būtībā ir kodola objekts ar diviem stāvokļiem. Parasti notikums signalizē par notikuma tuvošanos un dažreiz pat par I / O darbības beigām.
3. “Mutex” apzīmē savstarpēju izslēgšanu. Tas ir koplietojamo resursu darbības jomas koordinācijas mehānisms.
4.Mutex, kas nodarbojas ar starpprocesu sinhronizāciju, atrodas kodola režīma objektā. Notikumi daudzpavedienu sinhronizēšanai ar vienu metodi ir lietotāja režīma objektā.
5.Pašlaik vairāk ir nosacījuma mainīgais, atšķirībā no Mutex, kas vairāk līdzinās a
monitoru kādā no terminoloģijām, vai arī tas var būt tradicionāls semafora / muteksa veids.