
Pernah kepikiran nggak sih kenapa kadang program C++ kita jalan nggak sesuai harapan, terutama pas ngomongin multithreading?
Ternyata, ada yang namanya strong happens-before yang jadi kunci penting. Intinya, strong happens-before itu kayak aturan main di C++ yang ngatur urutan eksekusi instruksi biar nggak ada kejadian aneh.
Kalo A happened-before B, artinya A pasti dieksekusi duluan sebelum B. Sederhana kan? Nah, di dunia nyata, compiler sama prosesor itu pinter banget, mereka bisa ngatur ulang urutan instruksi biar program jalan lebih cepet. Ini yang kadang bikin masalah kalo kita nggak paham konsepnya.
Bayangin ada program sederhana: satu thread bikin variabel, terus thread lain baca variabel itu. Kalo nggak ada strong happens-before, bisa aja thread kedua baca nilai variabelnya sebelum thread pertama sempat ngisi. Kacau deh! Makanya, ada yang namanya **total order of seq_cst**. Ini semacam "jalan raya" buat semua operasi yang pake urutan paling ketat.
Jadi, semua program di semua core prosesor harus melihat operasi-operasi ini dalam urutan yang sama. Yang menarik lagi, ternyata arsitektur prosesor itu beda-beda, salah satunya Power architecture. Arsitektur ini punya cara sendiri ngatur memori, dan kadang bikin strong happens-before jadi agak rumit.
Karena kerumitan ini, makanya ada komite yang kerja keras buat benerin dan bikin aturan mainnya jadi lebih jelas dan konsisten di semua arsitektur. Ini penting banget biar programmer bisa lebih percaya diri pas ngoding multithreaded.
Jadi, kalo lo lagi ngoding C++ dan ngerasa ada yang aneh, coba deh inget-inget konsep strong happens-before dan gimana compiler sama prosesor kerja. Pahami aturan mainnya, dijamin ngoding jadi lebih santai!