Thursday, March 5, 2015

Fitur "lock" dalam Thread - C#

Pada postingan ini akan diperlihatkan contoh program penggunaan fitur lock dalam thread C#. Secara sederhana, lock ini berfungsi untuk mengunci suatu variabel jika sedang digunakan oleh suatu thread, dan mencegah thread lain untuk menggunakan variabel tersebut sebelum thread yang pertama selesai menggunakannya. Ok,.. Pertama mari kita buat project baru dalam visual studio :
Kemudian tambahkan kode berikut dalam fungsi mainnya :
Pada 11 dibuat variabel boolean dengan nama status dan nilai true. Variabel ini digunakan oleh fungsi Go() seperti yang terlihat pada line 34. Pada line 12 dibuat variabel baru dengan nama _locker. Variabel inilah yang nantinya akan menggunakan fitur "lock", tapi pada contoh program diatas, variabel _locker ini masih belum digunakan. Terus pada fungsi Main, dibuat 2 biji thread t1, dan t2. t1 dan t2 tersebut sama-sama mengakses fungsi Go(). So ketika t1 dan t2 start, mereka akan menjalankan fungsi Go(). Di dalam fungsi Go() terlihat (pada line 32) bahwa variabel status dicek, klu true berarti akan diprint angka 0 sampai 16. Nah ketika t1 start, variabel status masih true, sehingga dia bisa masuk dalam blok if (line 34 - 43), ketika pas masuk, status diubah menjadi false, sehingga thread lain yang mengakses blok if tersebut akan dilewati saja klu nilainya false. Makanya pas thread ke-2 running, nilainya udah false, sehingga thread kedua ini tidak melakukan apa-apa dalam fungsi Go(). Hasilnya seperti terlihat di bawah :
Terlihat bahwa thread 2 tidak jalan karena status sudah menjadi false. Tapi thread kedua tersebut dapat jalan juga ketika sesaat sebelum thread 1 mengubah status menjadi false, thread kedua sudah running lebih dulu. Dan hal tersebut dapat dilakukan dengan cara program tersebut dirunning berkali-kali sampai thread 2 jalan. Hisoka nyobain dulu........................................................... Nah setelah lima kali dirunning akhirnya thread kedua bisa jalan juga :
Nah klu kyk gini, sifat dari program yang kita buat susah dikontrol kan yah... :D
So disini diperlihatkan penggunaan fitur lock. Lock ini kita aplikasikan ke dalam block if seperti terlihat di bawah :
Jika thread 1 menggunakan lock tersebut, maka thread 2 akan dibuat nunggu dulu sampai thread 1 selesai make _locker tersebut. Jadi hasilnya, thread 1 dan 2 akan selalu bergantian masuk ke dalam blok if. Setelah dirunning kurang lebih 57 kali, hasilnya tetap stabil seperti ini :

Terlihat ketika thread 1 masuk ke fungsi Go(), maka thread 2 di sleep/pause sementara waktu sampai thread 1 selesai. Dan pada saat thread 2 di sleep, alokasi memory yang digunakan lebih sedikit dari pada menggunakan looping while.

Sekian.... Semoga bermanfaat..... :-)


No comments:

Post a Comment