Concurrency - Mutex
Last updated
Last updated
Sebelum membahan tentang Mutex, ada hal penting di dalam concurrent programming. Ketika program berjalan secara concurrent, tidak boleh terjadi lebih dari satu goroutine, mengakses data yang sama pada waktu yang bersamaan (benar-benar bersamaan). Ketika hal ini terjadi, nilai data tersebut akan menjadi kacau dan conflict.
Misalnya kita ingin melakukan proses counter dimulai dari initial value 0
dan bertambah 1
setiap perulangan dimana hasil akhirnya adalah 1000
.
Jika program di atas dijalankan oleh lebih dari 1 goroutine maka kemungkinan yang akan terjadi adalah sebagai berikut:
Mari kita lihat contoh kasus berikut ini dimana akan dijalankan oleh 1000 goroutine tanpa menggunakan Mutex:
Mari kita menggunakan Mutex untuk menyelesaikan kasus di atas.
Mutex adalah sebuah tipe data. Pada kode di atas kita membuat a zero value pada variabel m
yang bertipe Mutex
pada baris kode ke-15. Kita mengubah behaviour pada fungsi increment
sehingga kode x = x + 1
berada diantara m.Lock()
and m.Unlock()
. Ini membuat hanya 1 goroutine yang bisa menjalankan statement tersebut dalam 1 waktu.