std::atomic
- C++ kursu
- İleri seviye
- Ders 25/83
- 5 dk
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
#include <iostream>
#include <atomic>
int main() {
// atomic oluştur, store ve load ile yazdır
return 0;
}Örnek çözüm
#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
std::atomic<int> a{0};
____(5);
std::cout << a.load();
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? |