Mutex at Kaganapan

Anonim

Mutex kumpara sa Kaganapan

Sa C #, mayroong maraming iba't ibang mga pagpipilian sa pag-synchronize ng threading. Ang dalawa pang mas malawak na ginamit ay mutex at kaganapan. Kung ano talaga ang pagkakaiba sa pagitan ng dalawang ito? Aling isa ang mas mahusay na pagpipilian?

Ang opsyon sa kaganapan ay maaaring magbigay ng mga thread na opsyon upang harangan hanggang sa isang kaganapan ay broadcast kaya ang pangalan na "kaganapan." Ito ay katulad ng paglalagay ng isang bagay sa pagtulog at lamang waking up ito kapag ang isang bagay ng kabuluhan ang mangyayari. Ang mga kaganapan ay hindi katulad ng mga mutexes dahil ang mga mutexes ay walang opsiyon o function ng pagbibigay ng senyas. Ang mga kaganapan ay makakapag-clear ang signal kapag ang isang tao na nagawang maghintay dito ay nagising. Kahit na pinahihintulutan ng API ang pagpipilian upang harangan ang hanggang sa isa o lahat ng iba't ibang mga kaganapan ay signaled. Bilang karagdagan, ang mga kaganapan ay mga bagay na kernel. Hindi sila "mas magaan" kumpara sa mga mutexes. Ang isang kaganapan ay karaniwang isang kernel object na may dalawang estado. Karaniwan, ang isang kaganapan ay nagpapahiwatig ng pagdating ng isang kaganapan at kung minsan kahit na ang katapusan ng operasyon ng I / O.

Ang "Mutex" ay kumakatawan sa Pagbubukod ng Mutual. Ito ay isang form ng scoped mekanismo ng koordinasyon para sa mga mapagkukunan na ibinahagi. Isipin ito bilang isang paraan ng transaksyon. Hindi ka obligado na maghintay kahit na gusto mong i-access ang ilang mga nakabahaging mga mapagkukunan (tanging sa pagkakataon na ang iba ay naka-access na ito) ay hinarang mo. Ang isang mutex ay binubuo ng dalawang estado bagaman umiiral ito upang magkabisa ang isang kapwa pagbubukod. Ito ay para sa kung nais mong protektahan ang isang kahabaan ng code na karaniwang ina-update ang isang nakabahaging mapagkukunan mula sa bahagi kung saan ang mutex ay inaangkin sa bahagi kung saan ito ay inilabas. Ito ay humahantong sa ang katunayan na walang ibang thread na maaaring pumasa sa pamamagitan ng seksyon.

Ang mga taong nagsisikap na gayahin ang isang pangyayari sa tulong ng isang mutex ay kailangang makatagpo ng problema kung saan kaagad ang lock ay nakuha o ang kaganapan ay signaled, ang tao ay nag-iingat sa lahat ng tao out hanggang ang lock ay inilabas. Ito ay hindi ang mga semantika ng isang kaganapan na signaled. Ang isang kaganapan ay maaaring manatiling nai-post at isang form ng gate ay magagamit para sa lahat ng mga thread na pagsubok sa kaganapan na walang anumang mga kandado. Ang Mutex na nakatuon sa pag-synchronize ng interprocess ay nasa kernel-mode object. Ang mga kaganapan na ginawa para sa pag-synchronize ng multithreaded sa ilalim ng isang paraan ay nasa user-mode na object.

Ang bagay na Mutex ay masyadong mabigat at masyadong pangkalahatan. Ang mga bagay sa kaganapan ay mas magaan. Ang pag-synchronize ng user-mode ay ginagamit sa karamihan ng mga sitwasyon dahil sa dahilan na nagbibigay ito ng mas kaunting mga cycle ng CPU. Ang Mutex ay halos tulad ng isang kritikal na seksyon at ginagamit upang i-synchronize ang pag-access sa mga mapagkukunan na ibinahagi. Ang mga kaganapan ay may isang ganap na iba't ibang mga pag-andar dahil ginagamit ang mga ito upang i-synchronize ang mga gawain o para sa pamamahala ng pag-iiskedyul ng gawain para sa ilang mga tao.

Ang mga kaganapan ay higit pa sa isang kondisyon na variable, hindi katulad ng Mutex, na mas katulad ng isang monitor sa ilan sa mga terminolohiya, o maaari itong maging isang tradisyunal na anyo ng semaphore / mutex.

Buod:

1.Ang pagpipilian sa kaganapan ay maaaring magbigay ng mga thread na pagpipilian upang harangan hanggang sa isang kaganapan ay broadcast, kaya ang pangalan na "kaganapan."

2.Ang kaganapan ay karaniwang isang kernel object na may dalawang estado. Karaniwan, ang isang kaganapan ay nagpapahiwatig ng pagdating ng isang kaganapan at kung minsan kahit na ang katapusan ng operasyon ng I / O.

3. "Mutex" ay kumakatawan sa Mutual Exclusion. Ito ay isang form ng scoped mekanismo ng koordinasyon para sa mga mapagkukunan na ibinahagi.

4.Mutex nakatuon sa interprocess synchronization ay nasa kernel-mode object. Ang mga kaganapan na ginawa para sa pag-synchronize ng multithreaded sa ilalim ng isang paraan ay nasa user-mode na object.

5. Ang mga kaganapan ay higit pa sa isang kondisyon na variable, hindi katulad ng Mutex, na mas katulad ng isang monitor sa ilan sa mga terminolohiya, o maaari itong maging isang tradisyunal na anyo ng semaphore / mutex.