C++ memory model
- C++ kursu
- Uzman
- Ders 13/47
- 5 dk
C++ memory model ve atomic temellerini öğrenirsin.
C++ memory model
C++ bellek modeli, iş parçacıklarının belleğe nasıl eriştiğini ve hangi koşullarda tutuarlı sonuçlar elde edileceğini tanımlar. Standart kütüphanedeki std::atomic<T> şablonu her erişimin bölünmez (atomik) olmasını sağlar.
Örnek: std::atomic<int> counter{0};. Burada counter.store(5) yazma, counter.load() okuma yapar. Aynı anda iki iş parçacığı erişse bile yarış oluşmaz; değer her zaman tutarlı kalır. Bu, çok iş parçacıklı programların temel taşıdır.
Atomik erişim
Her iş parçacığının belleğe kendi görünümü vardır; eşzamanlama olmadan bir iş parçacığı diğerinin yazdığını görmeyebilir. std::atomic bu sorunu çözer: her okuma ve yazma bölünmezdir.
Örnek: bir iş parçacığı counter.store(7) yapar, diğeri counter.load() çağırır. Atomik erişim sayesinde yük ya eski 0 değerini ya da yeni 7 değerini görür; asla yarım bir değer okumaz. Ayrıca fetch_add ile oku-değiştir-yaz tek bölünmez adımda yapılır.
Uygulama Atomik counter kullan
Global std::atomic<int> counter{0}; tanımla. main içinde counter.store(7); ve std::cout << counter.load(); yaz.
Başlangıç kodu
#include <iostream>
#include <atomic>
// counter atomik değişkenini buraya tanımla
int main() {
// counter'a değer ata ve yazdır
return 0;
}Örnek çözüm
#include <iostream>
#include <atomic>
std::atomic<int> counter{0};
int main() {
counter.store(7);
std::cout << counter.load();
return 0;
}Beklenen çıktı
7
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 C++ bellek modeli neyi tanımlar?
std::atomic<int> counter{0};- Yalnızca değişken boyutları
- Çok iş parçacıklı bellek erişimini Doğru cevap
- Derleyici sürümlerini
- Sınıf üye sıralarını
Açıklama: Bellek modeli, iş parçacıklarının belleğe nasıl eriştiğini ve neyin tutarlı olduğunu tanımlar.
2 Atomik değişkeni tamamla
std::atomic<int> ____; // ready bayrağı
std::atomic<int> ready; // ready bayrağı
Açıklama: ready atomik bayrağı böyle tanımlanır.
3 Parçayı rolüne eşle
| Kavram | Anlamı |
|---|---|
std::atomic<int> |
Atomik erişim |
thread T(func) |
İş parçacığı başlatma |
x.store(5) |
Atomik yazma |
x.load() |
Atomik okuma |