CodeBlanks Logo Icon CodeBlanks

std::atomic

std::atomic ile atomik işlemleri öğrenirsin.

std::atomic

std::atomic<T>, veri yarışı olmadan paylaşılan T değeri tutar. Tüm okuma ve yazma işlemleri bölünmez (indivisible) yapılır; aynı anda yalnızca bir işlem gerçekleşir. Sözdizimi: std::atomic<int> a{0};.

Atomic, mutex'ten daha hızlıdır çünkü işletim sistemi çağrısı yapmaz; çoğu zaman tek bir CPU komutuyla yürütülür. load() okur, store(v) yazar. a = 5; ve int x = a; gibi kısa yazımlar da otomatik olarak atomic işleve dönüşür. Atomic, sayaç ve bayrak gibi küçük paylaşılan veriler için idealdir.

load ve store

Atomic değeri okumak için a.load(), yazmak için a.store(v) kullanılır. Bu açık biçim, okuma/yazma sırasını netleştirir. Kısa yazım da geçerlidir: int x = a; ile x = a.load(); aynıdır; a = 5; ile a.store(5); aynıdır.

Atomic'in is_lock_free() üye işlevi, işlemin gerçekten donanım düzeyinde atomic olup olmadığını söyler. true dönerse mutex kullanılmaz; false dönerse altta gizli bir mutex vardır. Çoğu temel tür (int, bool, pointer) için true döner; büyük yapılar için false olabilir.

Uygulama store ve load

std::atomic<int> a{0}; oluştur. a.store(5); ile değer yaz, std::cout << a.load(); ile oku ve yazdır. <atomic> başlığını ekle.

Başlangıç kodu

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

int main() {
    // atomic oluştur, store ve load ile yazdır
    return 0;
}

Örnek çözüm

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

int main() {
    std::atomic<int> a{0};
    a.store(5);
    std::cout << a.load();
    return 0;
}

Beklenen çıktı

5

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 std::atomic neyi önler?

  • Veri yarışını Doğru cevap
  • Bellek sızıntısını
  • İstisnayı
  • İş parçacığı sayısını

Açıklama: std::atomic, paylaşılan değere erişimde veri yarışını önler.

2 store satırını tamamla

Soru
std::atomic<int> a{0};
____(5);
std::cout << a.load();
Cevap
std::atomic<int> a{0};
a.store(5);
std::cout << a.load();

Açıklama: a.store(5) atomik biçimde yazar.

3 İfadeyi rolüne eşle

Kavram Anlamı
a.load() Atomik okuma
a.store(v) Atomik yazma
std::atomic<int> Atomic int tanımı
a.is_lock_free() Kilitsiz mi?

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