CodeBlanks Logo Icon CodeBlanks

Özet - Atomic

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

main.cpp
#include <iostream>
#include <atomic>

int main() {
    // atomic oluştur, iki fetch_add yap, yazdır
    return 0;
}

Örnek çözüm

main.cpp
#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

Soru
std::atomic<int> a{0};
a.____(7);
a.fetch_add(3);
std::cout << a.load();
Cevap
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.

İleri seviye bölümündeki tüm dersler