Mutex vs Event
Dalam C #, terdapat banyak pilihan penyegerakan threading yang berbeza. Dua lagi digunakan secara meluas adalah mutex dan acara. Betapa sebenarnya perbezaan antara keduanya? Yang mana satu pilihan yang lebih baik?
Opsyen acara dapat memberi benang pilihan untuk dihalang sehingga acara disiarkan dengan demikian nama "acara." Ia sama seperti meletakkan sesuatu untuk tidur dan hanya terbangun apabila sesuatu yang penting berlaku. Peristiwa tidak seperti mutexes kerana mutexes tidak mempunyai pilihan atau fungsi isyarat. Peristiwa mampu mengosongkan isyarat sebaik sahaja seseorang yang dapat menunggu di atasnya telah terbangun. Malah API dapat membenarkan pilihan untuk menyekat sehingga satu atau semua peristiwa yang berlainan adalah memberi isyarat. Di samping itu, peristiwa adalah objek kernel. Mereka tidak "ringan" berbanding dengan mutexes. Satu peristiwa pada dasarnya merupakan objek kernel yang mempunyai dua keadaan. Biasanya, peristiwa menandakan kedatangan peristiwa dan kadang kala berakhirnya operasi I / O.
"Mutex" bermaksud Pengecualian Mutual. Ia adalah satu bentuk mekanisme penyelarasan untuk sumber yang dikongsi. Fikirkannya sebagai satu bentuk transaksi. Anda tidak diwajibkan menunggu walaupun anda ingin mengakses beberapa sumber yang dikongsi (hanya dalam contoh yang orang lain telah mengaksesnya) anda menyekat. Mutex terdiri daripada dua negeri walaupun ia wujud untuk melaksanakan pengecualian bersama. Ini adalah untuk apabila anda ingin melindungi kod regangan yang biasanya mengemas kini sumber yang dikongsi dari bahagian di mana mutex dituntut ke bahagian di mana ia akan dikeluarkan. Ini membawa kepada hakikat bahawa tiada benang lain boleh melalui bahagian itu.
Orang yang telah cuba mensimulasikan sesuatu acara dengan bantuan mutex terpaksa menghadapi masalah di mana sebaik sahaja kunci itu diperoleh atau peristiwa itu memberi isyarat, orang itu menyimpan orang lain keluar sehingga kunci dilepaskan. Ini bukan semantik peristiwa yang dinyanyikan. Satu acara boleh terus dipasang dan satu bentuk pintu akan disediakan untuk semua ujian thread sekiranya tidak mempunyai sebarang kunci. Mutex komited untuk menyegerakkan antara proses dalam objek mod kernel. Peristiwa yang dibuat untuk penyegerakan multithreaded di bawah satu kaedah adalah dalam objek mod pengguna.
Objek Mutex terlalu berat dan terlalu umum. Objek acara jauh lebih ringan. Penyegerakan mod pengguna digunakan dalam kebanyakan situasi disebabkan sebab ia memberikan kitaran CPU yang kurang. Mutex adalah sangat seperti seksyen kritikal dan digunakan untuk menyegerakkan akses kepada sumber yang dikongsi. Peristiwa mempunyai fungsi yang sama sekali berbeza kerana ia digunakan untuk menyegerakkan tugas atau pengurusan penjadualan tugas bagi sesetengah orang.
Peristiwa lebih banyak daripada pembolehubah keadaan, tidak seperti Mutex, yang lebih seperti a
memantau dalam beberapa istilah, atau ia boleh menjadi bentuk tradisional semaphore / mutex.
Ringkasan:
1.Pilihan acara dapat memberi benang pilihan untuk dihalang sehingga acara disiarkan, dengan demikian nama "acara."
2.Suatu peristiwa pada dasarnya adalah objek kernel yang mempunyai dua keadaan. Biasanya, peristiwa menandakan kedatangan peristiwa dan kadang kala berakhirnya operasi I / O.
3. "Mutex" bermaksud Pengecualian Mutual. Ia adalah satu bentuk mekanisme penyelarasan untuk sumber yang dikongsi.
4.Mutex yang komited untuk menyegerakkan antara proses adalah dalam objek mod kernel. Peristiwa yang dibuat untuk penyegerakan multithreaded di bawah satu kaedah adalah dalam objek mod pengguna.
5.Events adalah lebih daripada pembolehubah keadaan, tidak seperti Mutex, yang lebih seperti a
memantau dalam beberapa istilah, atau ia boleh menjadi bentuk tradisional semaphore / mutex.