Apa perbedaan utama antara Monitor dan Semaphore ?
Apa perbedaan utama antara Monitor dan Semaphore ?
Jawaban:
Sebuah monitor adalah obyek yang dirancang untuk diakses dari beberapa thread. Fungsi atau metode anggota objek monitor akan memberlakukan pengecualian bersama, jadi hanya satu utas yang dapat melakukan tindakan apa pun pada objek tersebut pada waktu tertentu. Jika satu utas saat ini menjalankan fungsi anggota objek maka utas lainnya yang mencoba memanggil fungsi anggota objek itu harus menunggu sampai yang pertama selesai.
Sebuah Semaphore adalah objek-tingkat yang lebih rendah. Anda mungkin menggunakan semaphore untuk mengimplementasikan monitor. Semafor pada dasarnya hanyalah sebuah penghitung. Ketika penghitung positif, jika utas mencoba untuk mendapatkan semafor maka diizinkan, dan penghitung dikurangi. Ketika sebuah thread selesai maka ia melepaskan semaphore, dan menambahkan counter.
Jika penghitung sudah nol ketika utas mencoba untuk mendapatkan semaphore maka itu harus menunggu sampai utas lain melepaskan semafor. Jika beberapa utas sedang menunggu ketika utas melepaskan semafor maka salah satu dari mereka mendapatkannya. Utas yang melepaskan semafor tidak harus berupa utas yang sama dengan yang diperolehnya.
Monitor seperti toilet umum. Hanya satu orang yang bisa masuk sekaligus. Mereka mengunci pintu untuk mencegah orang lain masuk, melakukan barang-barang mereka, dan kemudian membuka kunci ketika mereka pergi.
Semaphore seperti tempat penyewaan sepeda. Mereka memiliki sejumlah sepeda. Jika Anda mencoba dan menyewa sepeda dan mereka memiliki satu gratis maka Anda dapat mengambilnya, jika tidak Anda harus menunggu. Ketika seseorang mengembalikan sepedanya maka orang lain dapat mengambilnya. Jika Anda memiliki sepeda maka Anda dapat memberikannya kepada orang lain untuk kembali --- tempat penyewaan sepeda tidak peduli siapa yang mengembalikannya, selama mereka mendapatkan kembali sepeda mereka.
Penjelasan berikut sebenarnya menjelaskan bagaimana wait () dan signal () monitor berbeda dari P dan V semaphore.
Operasi menunggu () dan sinyal () pada variabel kondisi di monitor mirip dengan operasi P dan V pada penghitungan semafor .
Pernyataan tunggu dapat memblokir eksekusi suatu proses, sementara pernyataan sinyal dapat menyebabkan proses lain tidak terblokir. Namun, ada beberapa perbedaandiantara mereka. Ketika suatu proses mengeksekusi operasi P, itu tidak perlu menghalangi proses itu karena semaphore penghitungan mungkin lebih besar dari nol. Sebaliknya, ketika pernyataan tunggu dieksekusi, itu selalu memblokir proses. Ketika tugas mengeksekusi operasi V pada semaphore, itu baik membuka blokir tugas menunggu di semaphore itu atau menambah penghitung semaphore jika tidak ada tugas untuk membuka kunci. Di sisi lain, jika suatu proses mengeksekusi pernyataan sinyal ketika tidak ada proses lain untuk membuka blokir, tidak ada efek pada variabel kondisi. Perbedaan lain antara semaphore dan monitor adalah bahwa pengguna yang dibangunkan oleh operasi V dapat melanjutkan eksekusi tanpa penundaan. Sebaliknya, pengguna yang terbangun oleh operasi sinyal hanya akan dihidupkan ulang ketika monitor tidak terkunci. Sebagai tambahan,
Tautan: di sini untuk bacaan lebih lanjut. Semoga ini bisa membantu.
Semaphore memungkinkan banyak utas (hingga nomor yang ditetapkan) untuk mengakses objek bersama. Monitor memungkinkan akses yang saling eksklusif ke objek yang dibagikan.
java.util.ArrayList
: apakah ini objek atau wadah beberapa objek? Ya, keduanya sekaligus. Jadi apakah semaphore tepat untuk mengontrol akses ke sana? Saya akan mengatakan: tidak.
Ketika semaphore digunakan untuk menjaga wilayah kritis, tidak ada hubungan langsung antara semaphore dan data yang dilindungi. Ini adalah bagian dari alasan mengapa semafor dapat tersebar di sekitar kode, dan mengapa mudah untuk lupa memanggil menunggu atau memberi tahu , dalam hal ini hasilnya akan, masing-masing, melanggar pengecualian bersama atau untuk mengunci sumber daya secara permanen.
Sebaliknya, hal-hal buruk ini dapat terjadi dengan monitor. Monitor lelah langsung ke data (itu merangkum data) dan, karena operasi monitor adalah tindakan atom, tidak mungkin untuk menulis kode yang dapat mengakses data tanpa memanggil protokol entri. Protokol keluar dipanggil secara otomatis ketika operasi monitor selesai.
Monitor memiliki mekanisme bawaan untuk sinkronisasi kondisi dalam bentuk variabel kondisi sebelum melanjutkan. Jika kondisi tidak terpenuhi, proses harus menunggu sampai diberitahukan tentang perubahan kondisi. Ketika suatu proses sedang menunggu sinkronisasi kondisi, implementasi monitor menangani masalah saling pengecualian, dan memungkinkan proses lain untuk mendapatkan akses ke monitor.
Diambil dari materi kursus "Proses Interaksi" Unit 3 M362 Universitas Terbuka.
Semaphore:
Menggunakan penghitung atau bendera untuk mengontrol akses beberapa sumber daya bersama dalam sistem bersamaan, menyiratkan penggunaan Semaphore .
Contoh:
Bendera hanya mengungkapkan status Sumber Daya saat ini, tidak ada hitungan atau informasi lainnya tentang objek menunggu atau berlari di sumber daya.
Monitor:
SEBUAH monitor mensinkronisasikan akses ke objek dengan berkomunikasi dengan benang tertarik dalam objek, meminta mereka untuk akses memperoleh atau menunggu untuk beberapa kondisi untuk menjadi benar.
Contoh: