Sinkronisasi dua arah adalah suatu mekanisme dimana suatu
thread dapat mengendalikan
sinkronisasi
thread lain, begitu pula
sebaliknya. Berikut ini adalah sebuah program yang menggunakan
proses sinkronisasi dua arah. Program yang dibuat dalam bahasa
Java ini, bernama Hompimpah. Contoh program sinkronisasi dua arah
adalah semafor berjenis
non-spinlock. Semafor jenis
non-spinlock berarti implementasi
dari kelas Semafor, dimana semafor yang digunakan adalah jika ada
proses yang sedang berjalan, maka proses lain akan menunggu,
sampai ada
thread lain yang memanggilnya. Hal
ini sesuai dengan prinsip
critical section yaitu
mutualy exclusive, hanya satu
thread yang diizinkan mengakses
critical section;
progress,
critical section pasti ada yang
mengakses;
bounded waiting, setiap thread
dijamin dapat meng-akses
critical section. Hal ini dapat
dilihat dalam program yaitu ketika sang bandar sedang berada pada
critical section, pemain akan
menunggu hingga bandar selesai mengaksesnya. Sedangkan
kebalikannya adalah semafor jenis
spinlock, yang akan melakukan
infinite loop, sehingga
thread tersebut tidak ada jaminan
akan masuk
critical section. Semafor jenis
non-spinlock ini terdiri dari 2
operasi untuk proses sinkronisasi, yaitu operasi
buka(),dan operasi
kunci().