Özet - Atomic
- C++ kursu
- İleri seviye
- Ders 30/83
- 5 dk
atomic, memory_order ve compare_exchange'i birleştirerek bir sayaç yazarsın.
Özet - Atomic
Bu grupta atomik işlemlerin beş aracını gördün: std::atomic ile paylaşılan değer, memory_order ile sıralama garantileri, compare_exchange_strong ile CAS, atomic_flag ile spinlock ve fetch_add ile atomik aritmetik. Hepsi <atomic> başlığında bulunur.
Bu araçlar birlikte, kilitsiz (lock-free) ve veri yarışı olmayan paralel kod yazmayı sağlar. Şimdi öğrendiklerini birleştiren küçük bir görev yazacaksın: fetch_add ile iki atomik ekleme yapıp sonucu yazdıracaksın.
Uygulama Özet: iki fetch_add
std::atomic<int> a{0}; oluştur. a.fetch_add(7); ve a.fetch_add(3); ile iki atomik ekleme yap. std::cout << a.load(); ile sonucu yazdır. <atomic> başlığını ekle.
Başlangıç kodu
#include <iostream>
#include <atomic>
int main() {
// atomic oluştur, iki fetch_add yap, yazdır
return 0;
}Örnek çözüm
#include <iostream>
#include <atomic>
int main() {
std::atomic<int> a{0};
a.fetch_add(7);
a.fetch_add(3);
std::cout << a.load();
return 0;
}Beklenen çıktı
10
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Hangi araç en basit atomic türüdür?
- std::atomic<int>
- std::atomic_flag Doğru cevap
- std::future
- std::mutex
Açıklama: std::atomic_flag en basit atomic türdür; yalnızca iki durumlu.
2 Aracı amacına eşle
| Kavram | Anlamı |
|---|---|
std::atomic<int> |
Paylaşılan sayaç |
memory_order_relaxed |
Zayıf sıralama |
compare_exchange_strong |
CAS takası |
fetch_add |
Atomik ekleme |
3 fetch_add satırını tamamla
std::atomic<int> a{0};
a.____(7);
a.fetch_add(3);
std::cout << a.load();
std::atomic<int> a{0};
a.fetch_add(7);
a.fetch_add(3);
std::cout << a.load();
Açıklama: a.fetch_add(7) atomik olarak 7 ekler.