Pendahuluan TestAndSet Perangkat Sinkronisasi

Ketika gilirannya tiba kembali, thread memasuki ruang kontrol lagi acquire. Jika tugasnya selesai, ia keluar dari monitor release and exit. Gambar 20.1. Monitor Karena masalah sinkronisasi begitu rumit dan beragam, monitor menyediakan tipe data condition untuk programmer yang ingin menerapkan sinkronisasi yang sesuai untuk masalah yang dihadapinya. Condition memiliki operasi-operasi: 1. Wait , sesuai namanya thread yang memanggil fungsi ini akan dihentikan kerjanya. 2. Signal , jika suatu thread memanggil fungsi ini, satu dari beberapa thread yang sedang menunggu akan dibangunkan untuk bekerja kembali. Operasi ini hanya membangunkan tepat satu buah thread yang sedang menunggu. Jika tidak ada thread yang sedang menunggu, tidak akan terjadi apa-apa bedakan dengan operasi buka pada semafor. Ilustrasi monitor dengan condition variable: Gambar 20.2. Monitor dengan condition variable Bayangkan jika pada suatu saat sebuah thread A memanggil fungsi signal pada condition x x.signal dan ada sebuah thread B yang sedang menunggu operasi tersebut B telah memanggil fungsi x.wait sebelumnya, ada dua kemungkinan keadaan thread A dan B setelah A mengeksekusi x.signal : a. Signal-and-Wait , A menunggu sampai B keluar dari monitor atau menunggu condition lain yang dapat mengaktifkannya. 140 b. Signal-and-Continue , B menunggu sampai A keluar dari monitor atau menunggu condition lain yang dapat mengakifkannya. Monitor dikembangkan karena penggunaan semafor yang kurang praktis. Hal itu disebabkan kesalahan pada penggunaan semafor tidak dapat dideteksi oleh compiler. Keuntungan memakai monitor: 1. Kompilator pada bahasa pemrograman yang telah mengimplementasikan monitor akan memastikan bahwa resource yang dapat diakses oleh beberapa thread dilindungi oleh monitor, sehingga prinsip mutual exclusion tetap terjaga. 2. Kompilator bisa memeriksa kemungkinan adanya deadlock.

20.6. Monitor Java

Java adalah bahasa pemrograman yang telah menerapkan multithreading. Oleh karena itu, diperlukan suatu sistem yang dapat mensinkronisasi thread-thread tersebut. Java Virtual Machine memakai monitor untuk sinkronisasi thread. Monitor JVM mendukung dua jenis sinkronisasi yaitu: 1. Mutual Exclusion. Seperti pada monitor biasa, monitor mengatur thread-thread yang berbagi resource agar dapat bekerja sendiri-sendiri dengan baik tanpa ada yang saling menggangu.Pada umumnya pengaturan ini ditujukan untuk thread-thread yang saling berbagi resource, sehingga thread-thread yang tidak berbagi resource dapat dibiarkan bekerja sendiri. Akan tetapi, dalam JVM thread dengan prioritas lebih tinggi akan mendominasi thread dengan prioritas rendah sehingga CPU dapat dimonopoli oleh thread dengan prioritas tinggi dan thread dengan prioritas rendah tidak mendapatkann CPU time. Untuk mengatasi hal ini digunakanlah monitor. Secara umum monitor digunakan untuk melindungi akses terhadap resource yang ada di dalamnya.

2. Cooperation. Cooperation berarti membantu beberapa thread untuk bekerjasama mencapai

tujuannya. Cooperation berperan terutama ketika suatu thread menginginkan resource dalam keadaan tertentu dan thread lain bertanggung jawab untuk membuat resource tersebut menjadi seperti yang diinginkan oleh thread pertama.Dalam JVM, semua object dan class diasosiasikan dengan monitor object monitor dan class monitor. Untuk object, monitor melindungi variabel dari instansiasi object tersebut, untuk class, monitor melindungi class variable.Untuk mengimplementasikan mutual exclusion, JVM mengasosiasikan lock untuk setiap object dan class. Jika suatu thread mendapatkan lock -nya, thread lain tidak akan bisa mengambil lock tersebut sebelum thread itu melepaskan lock -nya suatu thread yang mendapatkan lock -nya mendapat akses untuk menggunakan monitor. Hal inilah yang disebut dengan object locking. Ilustrasi monitor Java: Gambar 20.3. Monitor JVM 141