Atomic Decrement dalam C++
Atomic decrement adalah operasi yang mengurangi nilai sebuah variabel atomik dengan satu. Dalam C++, operasi atomic decrement dapat dilakukan menggunakan fungsi --
yang diaplikasikan pada variabel atomik.
Pengertian Variabel Atomik
Variabel atomik adalah variabel yang dijamin aman untuk diakses secara bersamaan oleh beberapa thread. Operasi pada variabel atomik dilakukan secara atomic, yaitu operasi tersebut dijalankan dalam satu langkah tanpa terputus, sehingga memastikan konsistensi data meskipun diakses oleh beberapa thread secara bersamaan.
Keuntungan Menggunakan Atomic Decrement
- Keselamatan Thread: Mencegah race condition dan memastikan konsistensi data ketika diakses secara bersamaan oleh beberapa thread.
- Efisiensi: Mengoptimalkan kinerja dengan meminimalisasi kebutuhan locks dan synchronization overhead.
Contoh Penggunaan
#include
#include
#include
std::atomic counter(10);
void decrementCounter() {
for (int i = 0; i < 5; ++i) {
std::cout << "Thread " << std::this_thread::get_id()
<< ": Decremented counter to " << --counter << std::endl;
}
}
int main() {
std::thread thread1(decrementCounter);
std::thread thread2(decrementCounter);
thread1.join();
thread2.join();
std::cout << "Final counter value: " << counter << std::endl;
return 0;
}
Penjelasan
- Deklarasikan variabel atomik
counter
dengan nilai awal 10. - Buat dua thread yang menjalankan fungsi
decrementCounter
. - Fungsi
decrementCounter
melakukan decrement pada variabelcounter
sebanyak 5 kali. - Gunakan
std::this_thread::get_id()
untuk mendapatkan ID dari setiap thread. - Setelah kedua thread selesai, cetak nilai akhir dari variabel
counter
.
Output
Thread 0x7f9b60a94700: Decremented counter to 9
Thread 0x7f9b60a94700: Decremented counter to 8
Thread 0x7f9b60a94700: Decremented counter to 7
Thread 0x7f9b60a94700: Decremented counter to 6
Thread 0x7f9b60a94700: Decremented counter to 5
Thread 0x7f9b60a9a740: Decremented counter to 4
Thread 0x7f9b60a9a740: Decremented counter to 3
Thread 0x7f9b60a9a740: Decremented counter to 2
Thread 0x7f9b60a9a740: Decremented counter to 1
Thread 0x7f9b60a9a740: Decremented counter to 0
Final counter value: 0
Kesimpulan
Atomic decrement merupakan operasi yang penting dalam pemrograman multithreaded di C++. Dengan menggunakan atomic decrement, Anda dapat memastikan konsistensi data dan menghindari race condition ketika mengakses variabel secara bersamaan dari beberapa thread.