Javascript didefinisikan sebagai bahasa reentrant yang berarti tidak ada threading yang diekspos ke pengguna, mungkin ada untaian dalam penerapannya. Fungsi seperti setTimeout()
dan callback asinkron harus menunggu mesin skrip tidur sebelum dapat dijalankan.
Artinya segala sesuatu yang terjadi dalam suatu acara harus diselesaikan sebelum acara berikutnya diproses.
Karena itu, Anda mungkin memerlukan mutex jika kode Anda melakukan sesuatu yang mengharapkan nilai tidak berubah antara saat peristiwa asinkron dipicu dan saat callback dipanggil.
Misalnya jika Anda memiliki struktur data di mana Anda mengklik satu tombol dan mengirimkan XmlHttpRequest yang memanggil callback, mengubah struktur data dengan cara yang merusak, dan Anda memiliki tombol lain yang mengubah struktur data yang sama secara langsung, antara saat peristiwa itu terjadi. diaktifkan dan ketika panggilan kembali dijalankan, pengguna dapat mengklik dan memperbarui struktur data sebelum panggilan balik yang kemudian dapat kehilangan nilainya.
Meskipun Anda dapat membuat kondisi balapan seperti itu, sangat mudah untuk mencegahnya dalam kode Anda karena setiap fungsi akan bersifat atomik. Ini akan menjadi pekerjaan yang berat dan mengambil beberapa pola pengkodean yang aneh untuk menciptakan kondisi balapan sebenarnya.