#include <iostream>
#include <atomic>
#include <thread>
#include <vector>
// Deklarasi variabel hitung atomik
std::atomic<int> counter(0);
// Fungsi yang akan dijalankan oleh setiap thread
void increment() {
for (int i = 0; i < 10000; ++i) {
counter++; // Operasi atomik
}
}
int main() {
const int num_threads = 10;
std::vector<std::thread> threads;
// Membuat dan menjalankan thread
for (int i = 0; i < num_threads; ++i) {
threads.push_back(std::thread(increment));
}
// Menunggu semua thread selesai
for (int i = 0; i < num_threads; ++i) {
threads[i].join();
}
// Menampilkan hasil akhir
std::cout << "Hasil akhir hitungan atomik: " << counter.load() << std::endl; // Membaca nilai atomik
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXRvbWljPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8dmVjdG9yPgoKLy8gRGVrbGFyYXNpIHZhcmlhYmVsIGhpdHVuZyBhdG9taWsKc3RkOjphdG9taWM8aW50PiBjb3VudGVyKDApOwoKLy8gRnVuZ3NpIHlhbmcgYWthbiBkaWphbGFua2FuIG9sZWggc2V0aWFwIHRocmVhZAp2b2lkIGluY3JlbWVudCgpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewogICAgICAgIGNvdW50ZXIrKzsgLy8gT3BlcmFzaSBhdG9taWsKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBjb25zdCBpbnQgbnVtX3RocmVhZHMgPSAxMDsKICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dGhyZWFkPiB0aHJlYWRzOwoKICAgIC8vIE1lbWJ1YXQgZGFuIG1lbmphbGFua2FuIHRocmVhZAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fdGhyZWFkczsgKytpKSB7CiAgICAgICAgdGhyZWFkcy5wdXNoX2JhY2soc3RkOjp0aHJlYWQoaW5jcmVtZW50KSk7CiAgICB9CgogICAgLy8gTWVudW5nZ3Ugc2VtdWEgdGhyZWFkIHNlbGVzYWkKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3RocmVhZHM7ICsraSkgewogICAgICAgIHRocmVhZHNbaV0uam9pbigpOwogICAgfQoKICAgIC8vIE1lbmFtcGlsa2FuIGhhc2lsIGFraGlyCiAgICBzdGQ6OmNvdXQgPDwgIkhhc2lsIGFraGlyIGhpdHVuZ2FuIGF0b21pazogIiA8PCBjb3VudGVyLmxvYWQoKSA8PCBzdGQ6OmVuZGw7IC8vIE1lbWJhY2EgbmlsYWkgYXRvbWlrCgogICAgcmV0dXJuIDA7Cn0K