"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.

Kirim email ke