Sinkronisasi Thread
Pada suatu sistem multithreading, sinkronisasi adalah suatu proses pengendalian akses dari sumber daya terbagi pakai (shared resource) oleh banyak thread sedemikian sehingga hanya satu thread yang dapat mengakses sumber daya tertentu pada satu waktu.
Dalam aplikasi multithreaded yang tidak tersinkronisasi, sangat mungkin terjadi adanya satu thread memodifikasi suatu obyek yang dipakai bersama pada saat thread lain sedangkan dalam proses menggunakan atau mengupdate nilai obyek tersebut. Sinkronisasi mencegah jenis kerusakan data demikian, jika tidak disinkronkan maka dapat mengakibatkan pembacaan yang buruk dan error yang signifikan. Secara umum bagian kritis (critical sections) dari kode biasanya ditandai dengan kata kunci synchronized.
Contoh penggunaan sinkronisasi thread adalah dalam model “Producer/Consumer”.
Suatu lock (kunci) digunakan untuk mengsinkronkan akses ke sumber daya terbagi-pakai. Suatu lock dapat diasosiasikan dengan suatu sumber daya terbagi-pakai. Thread memperoleh akses ke sumber daya terbagi-pakai dengan terlebih dahulu mendapatkan lock yang terasosiasi dengan obyek atau block dari kode. Pada suatu waktu yang diberikan, harus hanya satu thread yang dapat memegang lock dan dengan cara demikian mempunyai akses ke sumber daya terbagi-pakai. Lock seperti ini mengimplementasikan mutual exclusion.
Mekanisme object lock (penguncian obyek) menjalankan aturan-aturan sinkronisasi berikut:
• Suatu thread harus memperoleh object lock yang diasosiasikan dengan suatu sumber daya terbagi-pakai, sebelum ia dapat memasuki sumber daya terbagi-pakai tersebut. Sistem runtime memastikan bahwa tidak ada thread lain yang dapat memasuki sumber daya terbagi-pakai jika suatu thread sudah memegang (hold) object lock yang diaosiasikan dengan sumber daya terbagi-pakai tersebut. Jika suatu thread tidak dapat dengan segera mendapatkan object lock,maka ia harus menunggu sampai lock tersedia.
• Pada saat suatu thread berada di dalam suatu sumber daya berbagi-pakai, sistem runtime memastikan bahwa object lock juga dilepaskan. Jika suatu thread lain sedang menunggu object lock ini, ia dapat diproses untuk mendapatkan lock agar memperoleh akses ke sumber daya terbagi-pakai tersebut.
Kelas juga mempunyai suatu lock spesifik kelas yang bersifat analog dengan object lock. Lock demikian sesungguhnya merupakan lock pada obyek java.lang.Class yang berasosiasi dengan kelas tersebut. Diberikan suatu kelas A, referensi A.kelas menyatakan obyek kelas unik ini. Class lock tersebut digunakan dengan cara yang sama seperti object lock untuk mengimplementasikan mutual exclusion.
Terdapat 2 (dua) bagian kode yang dapat dikenakan sinkronisasi di dalam Java:
• synchronized method
• synchronized block
Synchronized statement sama dengan synchronized method. Synchronized statement hanya dapat dieksekusi setelah suatu thread memperoleh lock terhadap obyek atau kelas yang dirujuk dalam pernyataan tersinkronisasi (synchronized statement).
Kamis, 06 Mei 2010
Langganan:
Posting Komentar (Atom)
Tidak ada komentar:
Posting Komentar