• Algoritma flag
• Shared data:
semaphore S; //diinisialisasi S = 1
• Process Pi:
do {
wait(S);
critical section
signal(S);
remainder section
} while (1);
1. Binary semaphore
• Semaphore mutex adalah binary semaphore dengan
nilai awal 1
• Thread manapun yang mengeksekusi down terlebih
dahulu akan terus jalan
• sedangkan yang datang kemudian akan menunggu
sampai up dieksekusi.
1. Binary semaphore (cont..)
• Operasi down adalah atomic, dan tidak dapat
diinterupsi sebelum diselesaikan.
• Operasi ini menurunkan nilai semaphore, jika
nilainya menjadi non positif (<=0) maka critical
section diblok untuk proses lainnya
• Operasi up adalah menaikkan nilai semaphore.
Fungsi Semaphores
Mutual exclusion :
• Thread yang akan memasuki critical section harus
memanggil fungsi down (nilai semaphore <=0)
• jika tidak ada thread yang lain dalam critical section
maka thread menggunakan critical section
• jika ada maka thread menunggu
Thread A Thread B
Down (mutex) Down (mutex)
Count = Count + 1 Count = Count +1
Up (mutex) Up (mutex)
2. Counting semaphore
Resource Controller
• Semaphore menyimpan banyaknya resource yang
tersedia
• saat thread ingin menggunakan resource maka thread
menggunakan fungsi down
• jika resource tersedia maka thread dapat langsung
menggunakannya
• jika masih digunakan, maka resourse menunggu
sampai fungsi up dieksekusi.
Fungsi Semaphores
Resource Controller (next..):
Thread A Thread B Thread C
Critical Section Critical Section Critical Section
• Shared data:
semaphore S; //diinisialisasi S = 5
• Process Pi:
do {
wait(S);
critical section
signal(S);
remainder section
} while (1);
Keuntungan Semaphores
• 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.
Implementasi Semaphore
• Untuk menghindari busy waiting, process yang menunggu
akses critical-section harus dihentikan sementara.
Di mana suatu writer sedang dijalankan oleh sistem, maka tidak boleh
ada reader yang memulai untuk membaca data.sehingga Kedua Jenis
Punya Prioritas yang Samayaitu tidak ada prioritas khusus yang
diberikan kepada kedua jenis proses.
Permasalahan Dining-Philosophers
• Linux:
• Prior to kernel Version 2.6, disables interrupts to implement short critical
sections
• Version 2.6 and later, fully preemptive
• Linux provides:
• semaphores
• spinlocks
• reader-writer versions of both
• On single-cpu system, spinlocks replaced by enabling and disabling
kernel preemption
Sinkronisasi pada Solaris