Özet - Concurrency
- C++ kursu
- İleri seviye
- Ders 24/83
- 5 dk
thread, mutex ve async'i birleştirerek paralel bir hesap yazarsın.
Özet - Concurrency
Bu grupta C++ concurrency'nin beş aracını gördün: std::thread ile iş parçacığı, std::mutex ile karşılıklı dışlama, std::lock_guard ile RAII kilit, std::async ile arka plan görevi ve std::future ile sonuç bekleme. Hepsi <thread> ve <future> başlıklarında bulunur.
Bu araçlar birlikte, paralel çalışan ve güvenli veri paylaşan programlar yazmayı sağlar. Şimdi öğrendiklerini birleştiren küçük bir görev yazacaksın: iki iş parçacığı, lock_guard ile korunan ortak counter'a değer ekleyecek.
Uygulama Thread + lock_guard ile özet
Global int counter = 0; ve std::mutex m; tanımla. void add(int n) yaz; gövdede std::lock_guard<std::mutex> lk(m); counter += n; olsun. main içinde std::thread t1(add, 5); ve std::thread t2(add, 3); başlat, her ikisini de join ile bekle, sonra std::cout << counter; yaz.
Başlangıç kodu
#include <iostream>
#include <thread>
#include <mutex>
int counter = 0;
std::mutex m;
// add fonksiyonunu yaz
int main() {
// İki iş parçacığı başlat, bekle, yazdır
return 0;
}Örnek çözüm
#include <iostream>
#include <thread>
#include <mutex>
int counter = 0;
std::mutex m;
void add(int n) {
std::lock_guard<std::mutex> lk(m);
counter += n;
}
int main() {
std::thread t1(add, 5);
std::thread t2(add, 3);
t1.join();
t2.join();
std::cout << counter;
return 0;
}Beklenen çıktı
8
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Hangi araç mutex için RAII sarmalayıcıdır?
- std::thread
- std::async
- std::future
- std::lock_guard Doğru cevap
Açıklama: std::lock_guard, mutex için RAII sarmalayıcıdır.
2 Aracı amacına eşle
| Kavram | Anlamı |
|---|---|
std::thread |
İş parçacığı |
std::mutex |
Karşılıklı dışlama |
std::lock_guard |
RAII kilit |
std::future |
Sonuç bekleme |
3 lock_guard satırını tamamla
void add(int n) {
std::____<std::mutex> lk(m);
counter += n;
}
void add(int n) {
std::lock_guard<std::mutex> lk(m);
counter += n;
}
Açıklama: std::lock_guard<std::mutex> lk(m); RAII ile kilit alır.