• Global variabel int counter = 0; • Diakses oleh 4 thread – Masing2 melakukan counter up (i++) 10000000 kali – Total (harusnya) nilai counter menjadi 4 x 10000000 = 40000000 • Coba jalankan solusi pada slide berikut – Copy dan jalankan program (screenshoot hasil masukan pada laporan) – Apakah nilai counter menjadi 40000000 – Mengapa? Program 1 Kasus 2: Cashier • Sebuah program internet banking sederhana multi threading menggunakan algoritma sbb apabila ada transfer masuk ke sebuah rekening (1) Thread mengakses saldo rekening (2) Thread menjumlahkan nilai transfer yang masuk dengan nilai saldo rekening saldo = saldo + transfer – Thread menyimpan nilai saldo yang baru 2 Thread menangani transfer masuk (saat hampir bersamaan) Thread 1 Thread 2 Saldo Ada permintaan transfer masuk Ada permintaan transfer masuk Rp 0 Check saldo awal (SALDO = 0) Rp 0 Menerima transfer Rp 10000000 Check saldo awal (SALDO =0) Rp 0 Menghitung saldo baru Menerima transfer 20000000 Rp 0 SALDO= 0 + 10000000 =10000000 Menyimpan saldo baru SALDO =0+20000000= 20000000 Rp.100000 Rp.10000000 00 Menyimpan Saldo baru Rp Rp 20000000 20000000
• Kasus : Saldo =0 + 10000000+20000000
= 30000000 Tugas • Hubungan kasus ke-2 dengan race condition? • Bagaimana cara mengatasi masalah ini secara teori ? (bandingkan dengan sistem operasi) • Apa yang menentukan hasil akhir dari kasus race condition apabila tidak ditangani? Mutual Exclusion Aplikasi pada program Counter Tugas Programming • Implementasi mutex pada kasus 2