Oleh :
Wahyu Andhyka Kusuma
081233148591
Wahyu_dink@umm.ac.id
Konsep Bahasan
• Perlunya Sinkronisasi
• Bounded Buffer & Race Condition
• Critical Section
▫ Solusi Logic : Algoritma Turn, Algoritma Flag,
Algoritma Turn-Flag, Bakery Algorithm
▫ Solusi Hardware
• Sleep and Wake up
• Semaphores
• Monitor
• Message Passing
• The Dining Philosophers Problem
• Readers and Writers Problem
• The Sleeping Barber Problem
Mengapa Perlu Sinkronisasi ?
• Banyak proses yang mengakses satu data pada
saat yang bersamaan
• Sehingga terjadi ketidakkonsistenan data
• Untuk itulah, sinkronisasi proses dipelukan
untuk menjaga agar data tersebut tetap
konsisten
Masalah yang seringkali muncul
P1 ( Counter ++ ) P2 ( Counter - - )
Register1 = Counter ; Register2 = Counter ;
Register1 = Register1 + 1 ; Register2 = Register2 - 1 ;
Counter = Register1 ; Counter = Register2 ;
PROSES
Entry Section
Critical Section
Exit Section
Remainder Section
• Critical Section adalah bagian dari code proses yang berisi
code-code untuk memanipulasi suatu data
Solusi Dari Problema Critical Section
Thread A Thread B
Down (mutex) Down (mutex)
Count = Count + 1 Count = Count +1
Up (mutex) Up (mutex)
Fungsi Semaphores
Mutual exclusion (next..):
• 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.
Fungsi Semaphores
Resource Controller (next..):
• 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
Thread A Thread B
Count = Count +1 Count = Count *2
Thread A Thread B
Count = Count + 1 Down (mutex)
Up (mutex) Count = Count *2
Fungsi Semaphores
Sinkronisasi antar proses (next..):
• Semaphore spinlock kondisi dimana thread
berada dalam waiting loop dan loop tersebut
tidak menghasilkan apapun (busy waiting)
• Mengatasi spinlock dengan waiting queue yaitu
dengan memindahkan thread yang menunggu ke
waiting queue, dan menghentikan prosesnya.
Fungsi Semaphores
Sinkronisasi antar proses (next..):
• Pada semaphore yang telah dimodifikasi ini,
terdapat nilai negatif yang menggambarkan
jumlah thread dalam waiting queue.
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.
Monitors
Monitor adalah suatu tipe data abstrak yang
dapat mengatur aktivitas serta penggunaan
resource oleh beberapa thread.
Monitor terdiri atas data-data private dengan
fungsi public.
Method-method monitor hanya ada satubuah
method yang dapat bekerja pada suatu saat.
Monitors
Ruang Kontrol
• enter • Waiting queue
• acquire
• Owning
• Release
Ruang Tunggu • acquire Ruang Tunggu
Masuk Dalam
Monitors
Tipe data Condition :
Wait, menghentikan kerja thread.
Signal, membangunkan thread yang sedang
menunggu. Operasi ini hanya membangunkan
satu thread.
Perbedaan antara signal dan up, signal tidak
akan memproses apapun jika tidak terdapat
thread yg menunggu.
Monitors
Penggunaan semafor kurang praktis. Sebab
kesalahan pada semafor tidak dapat dideteksi oleh
compiler. Keuntungan memakai monitor:
Kompilator yang telah mengimplementasikan
monitor akan memastikan bahwa resource yang
dapat diakses oleh beberapa thread dilindungi
oleh monitor, sehingga prinsip mutual exclusion
tetap terjaga.
Kompilator bisa memeriksa kemungkinan
adanya deadlock.
Message Passing
Message Passing hampir sama dengan
semaphore dan berbeda dengan monitor.
Menggunakan dua kondisi yakni send dan
receive
Message Passing digunakan pada problem yang
tidak dapat diatasi oleh semaphore dan monitor,
mis : Proses komunikasi antar mesin dalam
network.
Message Passing
Dalam kasus produsen – konsumen, maka
message yang di pertukarkan berisi informasi
mengenai kondisi produsen maupun konsumen.
Untuk menfasilitasi kecepatan akses message
disalah satu bagian (di produsen atau di
konsumen), maka di sediakan mailbox dalam
buffer.
Classical I.P.C Problem
o The Dining Philosophers Problem
Di temukan 1965 oleh djikstra, digambarkan
sebagai berikut, 5 filosof melingkari meja, setiap
filosof memiliki sepiring spageti, spageti yang
mereka makan sangat licin (?) sehingga mereka
butuh 2 garpu untuk memakannya. Diantara 2
piring spageti terdapat 1 garpu.
o The Dining Philosophers Problem
Classical I.P.C Problem
Classical I.P.C Problem
o The Dining Philosophers Problem (next..)
Kehidupan filosof terdiri dari 2 kondisi yaitu
makan dan berfikir, ketika seseorang lapar,
maka dia akan berusaha mendapatkan garpu
kanan dan kiri sekaligus, jika berhasil maka dia
akan makan sementara waktu kemudian
melanjutkan berpikir.
Classical I.P.C Problem
o The Dining Philosophers Problem (next..)
Solusi :
Menggunakan array state dengan menciptakan 3
kondisi.
Kondisi tersebut ialah makan (eating), think
(berpikir) dan lapar (hungry)
Classical I.P.C Problem
o The Dining Philosophers Problem (next..)
Dengan kondisi demikian, jika filosof = 1, maka
LEFT = 2, dan RIGHT = 3.