Semaphore
adalah sebuah struktur data komputer yang digunakan untuk
sinkronisasi proses, yaitu untuk memecahkan masalah di mana lebih
dari satu proses atau thread dijalankan secara bersamaan dan
harus diatur urutan kerjanya. Dalam kehidupan nyata, semaphore adalah
sistem sinyal yang digunakan untuk berkomunikasi secara visual. Dalam
software, semaphore adalah sebuah variabel bertipe integer yang
selain saat inisialisasi, hanya dapat diakses melalui dua operasi
standar, yaitu increment dan decrement. Semaphore digunakan untuk
menyelesaikan masalah sinkronisasi secara umum. Berdasarkan jenisnya,
semaphore hanya bisa memiliki nilai 1 atau 0, atau lebih dari sama
dengan 0.
Semaphore memiliki dua jenis, yaitu:
- Binary semaphore. Semaphore ini hanya memiliki nilai 1 atau 0. Sering juga disebut sebagai semaphore primitif
- Counting semaphore. Semaphore ini memiliki nilai 0, 1, serta integer lainnya. Banyak sistem operasi yang tidak secara langsung mengimplementasikan semaphore ini, tetapi dengan memanfaatkan binary semaphore
Prinsip semaphore
:
- Dua proses atau lebih dapat bekerja sama dengan menggunakan penanda-penanda sederhana
- Proses dipaksa berhenti sampai proses memperoleh penanda tertentu
- Variabel khusus untuk penandaan ini disebut semaphore
Fungsi Semaphore
Seperti telah disebutkan
sebelumnya, semaphore berfungsi untuk menangani masalah sinkronisasi
secara umum, yaitu:
- Mutual Exclusion. Sesuai dengan prinsip mutual exclusion, jika suatu thread sedang berada dalam critical section-nya, thread lain harus menunggu thread tersebut keluar dari critical section-nya sebelum dapat memasuki critical section-nya sendiri. Di sinilah semaphore digunakan, thread yang akan memasuki critical section-nya akan memanggil fungsi kunci terlebih dahulu. Jika tidak ada thread lain yang sedang berada dalam critical section, thread ini akan memasuki critical section-nya. Jika terdapat thread lain yang sedang berada dalam critical section-nya, thread ini harus menunggu.Setelah thread keluar dari critical section-nya, thread tersebut akan memanggil fungsi buka sehingga sem_value akan naik menjadi lebih dari 0, dan satu (dari beberapa) thread yang sedang menunggu akan mendapatkan giliran untuk memasuki critical section-nya.
- Resource Controller. Bayangkan sebuah restoran yang setiap malamnya ramai dikunjungi pelanggan. Kapasitas restoran terbatas, tetapi pemilik restoran memiliki kebijakan bahwa semua pengunjung yang datang akan mendapatkan kesempatan untuk makan, dengan konsekuensi yaitu pelanggan harus sabar menunggu gilirannya. Oleh karena itu, dikerahkanlah pegawai restoran untuk menahan tamu di luar jika restoran penuh lalu mempersilahkan tamu masuk jika tempat telah tersedia.Dari analogi di atas, pelanggan adalah thread, kapasitas restoran adalah resource, dan pegawai restoran adalah semaphore. Semaphore menyimpan banyaknya resource yang tersedia. Saat thread ingin memakai resource ia akan memanggil fungsi kunci. Jika resource masih tersedia, thread bisa langsung menggunakannya, sebaliknya jika semua resource sedang dipakai, thread tersebut harus menunggu. Setelah resource selesai dipakai thread akan memanggil fungsi buka sehingga resource yang bebas bertambah.
- Sinkronisasi Antar-Proses. Ada kalanya suatu thread memerlukan resource yang dihasilkan oleh thread lainnya. Oleh karena itu dibutuhkan suatu mekanisme untuk mengatur urutan eksekusi thread. Mekanisme ini dilakukan dengan memanfaatkan semaphore.
Keuntungan
menggunakan semaphore:
- Dari segi programming, penanganan masalah sinkronisasi dengan semaphore umumnya rapi dan teratur, sehingga mudah untuk dibuktikan kebenarannya
- Semaphore diimplementasikan dalam hard code sehingga penggunaannya bersifat portabel
Tidak ada komentar:
Posting Komentar