"M. Ridho" <[EMAIL PROTECTED]> writes:
> atau disebut oleh orang sebagai *not thread safe* atau
> *not multi-thread aware* ?
"thread safe" dan "multi-thread aware" adalah dua hal berbeda.
thread-safe adalah label yang dikenakan ke method dari sebuah object
atau function yang kalau dipanggil dari thread berbeda pada saat yang
ber-overlap, akan tetap berfungsi dengan benar.
multi-thread aware adalah label untuk library atau process lainnya
yang peduli apakah process kita sekarang ini multi-threaded atau
tidak.
> yang perlu manual synchronization (e.g., mereka yang *harus* berada
> dalam synchronize block atau yang semacemnya) itu berarti
Explicit synchronisation sama pemanggilan thread-safe method tidak
berhubungan. Kamu lakukan synchronisation supaya kamu bisa yakin hasil
computasi tidak salah dan seperti diharapkan/dipikirkan.
Contoh: misalnya method Set#put, Set#remove, dan Set#exists
thread-safe. Kalau dipanggil semacam ini:
s=Set.new
Thread.new { loop {
s.put(:foo); s.exists(:foo) or goto_dunia_antah() }}
Thread.new { loop {
s.remove(:foo); s.exists(:foo) and goto_dunia_berantah() }}
bisa pergi ke dunia antah atau berantah. Individually memang tidak
salah, tapi sebagai rangkaian, kalau tidak disynchronise, bisa
menghasilkan sesuatu yang tak diharapkan.
YS.