Proyek penutup section ini membangun program yang memakai lebih dari satu core sekaligus: menjumlahkan 4.000.000 angka dan menghitung statistiknya dengan empat thread, lalu membandingkan hasilnya dengan versi single-thread. Multithreading sering diperkenalkan sebagai topik yang penuh jebakan — data race, deadlock, hasil yang berubah-ubah — dan memang benar semua itu bisa terjadi. Tetapi dengan urutan yang tepat, sebagian besar bahayanya bisa dicegah sebelum thread pertama dibuat: pekerjaan yang dibagi dengan benar, slot hasil yang milik sendiri-sendiri, dan kunci yang hanya dipasang di tempat yang benar-benar dibagi.

Tiga keputusan desain menjaga program ini tetap dapat diuji. Pertama, data uji dibuat oleh PRNG berseed tetap (std::mt19937 dengan seed 42), sehingga setiap eksekusi bekerja pada data yang identik. Kedua, pembagian pekerjaan berupa rentang kontigu yang bisa diverifikasi tanpa thread — tidak ada celah, tidak ada tumpang tindih. Ketiga, program memakai pola collect-then-merge: tiap thread menulis ke slot hasil miliknya sendiri, thread utama menggabungkannya setelah semua selesai, dan hanya satu variable statistik yang dipakai bersama sehingga hanya dia yang membutuhkan mutex. Hasil akhirnya: output program berupa nilai agregat yang sama persis di setiap eksekusi, walaupun urutan eksekusi thread tak pernah terkendali.

Kita membangunnya dalam empat bagian:

  1. Bagian 1: Membagi Pekerjaan — data uji yang deterministik dan pembagian 4.000.000 elemen ke rentang kerja tanpa celah.
  2. Bagian 2: Menjalankan Thread — std::jthread, capture lambda yang aman, dan slot hasil per thread.
  3. Bagian 3: Menyinkronkan Data — data race sebagai undefined behavior, lalu std::mutex dan std::lock_guard pada satu-satunya data bersama.
  4. Bagian 4: Menguji Kebenaran dan Performa — program final, harness 29 cek yang membandingkan hasil paralel dengan single-thread, dan pembacaan pengukuran waktu.

Program final tersedia di src/multithread.cpp dan harnessnya di tests/uji-multithread.cpp sejak awal, sama seperti proyek-proyek sebelumnya. Anda tidak perlu pengalaman thread sebelumnya — semua keputusannya kita bangun dan kita buktikan langkah demi langkah.