Saat ini saya menghadiri kursus pemrograman bersamaan di universitas saya dan kami baru-baru ini mulai berbicara tentang konsep monitor. Sementara saya memahami perlunya saling pengecualian, saya tidak mengerti mengapa saya akan menggunakan monitor untuk itu.
Seperti yang saya pahami, monitor menjamin bahwa hanya satu atau tidak ada proses berada di bagian kritis setiap saat. Kita dapat mencapainya dengan semaphore. Selanjutnya kami menerapkan monitor (atau setidaknya satu kemungkinan untuk mengimplementasikannya) dengan semaphores.
Jadi mengapa saya menerapkan sesuatu yang melakukan hal yang persis sama dengan semaphore dengan semaphore? Apa manfaat yang saya dapatkan?
sumber
Kami akhirnya membahas mengapa Anda akan menggunakan monitor alih-alih semafor di kuliah hari ini.
Ini pada dasarnya bermuara pada ini: Monitor dan semaphore sama-sama ekspresif, yang berarti Anda dapat menemukan solusi untuk masalah dengan monitor di mana awalnya semaphore digunakan dan sebaliknya.
Yah, kita sudah tahu itu, jadi mengapa Anda menggunakan monitor, bukan semafor?
Pilihan Pribadi. Biasanya aplikasi desktop akan menggunakan monitor, menyisakan lebih sedikit kemungkinan untuk kesalahan, tetapi, sebagai imbalan, memiliki struktur yang kembung secara relatif. Semaphores di sisi lain sering digunakan dalam sistem operasi, karena mereka adalah struktur yang ringan, tetapi meninggalkan lebih banyak kemungkinan untuk kesalahan.
Saya kira kita dapat menyimpulkan bahwa ini adalah keputusan situasional apakah atau tidak Anda perlu / ingin menggunakan monitor atau semaphore. Jika Anda membangun sistem waktu nyata Anda mungkin ingin menggunakan semaphore, jika Anda sedang membangun program kantor Anda mungkin juga pergi dengan monitor.
sumber
Mengintip misalnya "Buku kecil sempaphores"oleh Allen B. Downey. itu menyatakan dan memecahkan banyak masalah sinkronisasi. Periksa khususnya solusi yang gagal, dan Anda akan melihat bahwa semaphore adalah mechaisme tingkat sangat rendah, sangat kuat tetapi sangat mudah disalahgunakan, di mana kesalahan sederhana memiliki konsekuensi yang mengerikan (diperburuk oleh operasi inheren nondeterministik dari program bersamaan). Misalnya, mudah untuk melupakan penerapan pengecualian bersama, beroperasi pada semafor yang salah, dan sebagainya. Monitor menawarkan solusi terpaket untuk kasus-kasus yang paling sering digunakan, dan membawa serta sebagian besar keuntungan pemrograman berorientasi objek (yaitu, Anda tahu satu-satunya cara untuk mengacaukan variabel yang dikelola oleh monitor adalah melalui operasinya). Kerugiannya adalah mereka tidak dapat dipasang dengan mudah ke bahasa yang tidak berorientasi objek,
sumber