Semaphore vs. Monitor - apa bedanya?


233

Apa perbedaan utama antara Monitor dan Semaphore ?


8
Anda dapat menganggap monitor sebagai semaphore biner.
Maxim Egorushkin


1
Silakan buka albahari.com/threading/part2.aspx ini . Saya membaca artikel ini, yang terbaik yang pernah saya baca di Threading
Shantanu Gupta

5
Saya pikir Anda tidak benar, Maxim. Semafor adalah struktur "level bawah", jika saya tidak salah, sedangkan Monitor adalah objek yang penuh. Saya ingat bahwa kami memeriksa monitor sebentar di kelas Sistem Operasi saya di perguruan tinggi, tapi saya tidak ingat bagaimana Monitor berbeda dari Mutex, selain itu berorientasi objek. Saya ingat satu masalah dapat dilakukan dengan menggunakan monitor, tetapi kami tidak dapat menggunakan metode yang sama di kelas, karena pembatasan bahasa C.
user919860

1
Semaphore dan Monitor sangat berbeda, namun memiliki kekuatan yang setara, dalam arti bahwa Anda dapat mengimplementasikan satu sama lain. Anda dapat membaca makalah asli Hoare yang membuktikan kesetaraannya dari sini
Thanh DK

Jawaban:


529

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.


162
+1 Analogi hebat dengan kamar mandi umum dan tempat penyewaan sepeda. Saya tidak akan pernah melupakan perbedaan antara keduanya sekarang.
Drupad Panchal

4
Jawaban Anda tampaknya bertentangan dengan stackoverflow.com/a/7336799/632951 .. jadi siapa yang benar?
Pacerier

6
@Pacerier: Saya :-) Satu-satunya kontradiksi adalah hal level tinggi / level rendah. Anda dapat membangun monitor dari semafor, hanya saja tidak terlalu rapi, justru karena monitor adalah struktur tingkat yang lebih tinggi daripada semafor. Semafor hanyalah counter dengan menunggu. Saya sarankan membaca "The Little Book of Semaphores" greenteapress.com/semaphores
Anthony Williams

3
@AnthonyWilliams: Saya mungkin meragukan gagasan bahwa Anda hanya dapat membangun monitor dari semaphore. Cara lain juga dimungkinkan dan karena itu kami tidak dapat mengatakan bahwa monitor adalah entitas level yang lebih tinggi daripada semaphore.
Kavish Dwivedi

5
Ya, Anda dapat membangun semaphore dari monitor. Anda selalu dapat membangun objek tingkat rendah dari yang tingkat tinggi. Hal-hal tingkat tinggi / rendah adalah tentang kemampuan dan ruang lingkup operasi, bukan tentang yang dapat digunakan untuk membangun yang lain.
Anthony Williams

11

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.


6

Jawaban Satu Baris:

Monitor: hanya mengontrol SATU utas pada satu waktu yang dapat dijalankan di monitor. (perlu mendapatkan kunci untuk mengeksekusi satu utas)

Semaphore: kunci yang melindungi sumber daya bersama. (perlu mendapatkan kunci untuk mengakses sumber daya)


5

Semaphore memungkinkan banyak utas (hingga nomor yang ditetapkan) untuk mengakses objek bersama. Monitor memungkinkan akses yang saling eksklusif ke objek yang dibagikan.

Monitor

Tiang sinyal


10
Tapi, lalu bagaimana Monitor berbeda dari MutEx? Kunci pengecualian timbal balik melakukan hal yang persis sama dengan a semaphore, tetapi hanya memungkinkan satu utas untuk mengakses Wilayah Kritis sekaligus.
user919860

2
Ya apa perbedaan antara seorang mnitor dan mutex?
Pacerier

2
Patut dicatat bahwa Semaphores tidak mengontrol akses ke objek bersama, melainkan sumber daya bersama (yang akan berisi banyak objek).
xbonez

@xbonez: Jika kita melihat 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.
dma_k

Dalam jawaban yang diterima sendiri disebutkan bahwa Monitor menerapkan Pengecualian Saling. Silakan lihat "Fungsi atau metode anggota objek monitor akan memberlakukan pengecualian bersama, jadi hanya satu utas yang dapat melakukan tindakan apa pun pada objek pada waktu tertentu"
achoora

2

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.


Kecuali itu, meskipun semaphore cukup umum tersedia dalam bahasa dan disajikan dalam buku teks sebagai jenis variabel dengan operator atom terbatas, semaphore adalah kasus khusus dari monitor - karena ini adalah jenis variabel dengan operator atom terbatas, karena itulah monitor itu. Argumen di atas bahwa semaphores adalah "level bawah" adalah spekulasi.
philipxy

2

Semaphore:

Menggunakan penghitung atau bendera untuk mengontrol akses beberapa sumber daya bersama dalam sistem bersamaan, menyiratkan penggunaan Semaphore .

Contoh:

  1. Sebuah konter yang memungkinkan hanya 50 Penumpang untuk memperoleh 50 kursi (sumber daya Bersama) dari Teater / Bus / Kereta / Hiburan / Ruang Kelas. Dan untuk memungkinkan Penumpang baru hanya jika seseorang mengosongkan kursi.
  2. Bendera biner yang menunjukkan status bebas / ditempati dari Kamar Mandi apa pun.
  3. Lampu lalu lintas adalah contoh bendera yang bagus. Mereka mengontrol aliran dengan mengatur lintasan kendaraan di Jalan (Sumber daya bersama)

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:

  1. Seorang Ayah dapat bertindak sebagai monitor untuk putrinya, yang memungkinkannya berkencan hanya dengan satu pria pada satu waktu.
  2. Seorang guru sekolah menggunakan tongkat untuk memungkinkan hanya satu anak untuk berbicara di kelas.
  3. Terakhir yang teknis, transaksi (melalui utas) pada objek Akun yang disinkronkan untuk menjaga integritas.

Saya pikir lampu lalu lintas di persimpangan jalan juga merupakan bendera biner: baik mobil di satu jalan atau di jalan orthogonal dapat dikendarai (saling eksklusif) maka contoh (3) sama dengan (2). Saya juga berpikir bahwa contoh-contoh tersebut adalah kasus sudut untuk semaphores (kasus sepele), yang dapat diimplementasikan menggunakan monitor. Ada banyak contoh khas di wikipedia .
dma_k
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.