CodeBlanks Logo Icon CodeBlanks

Özet - Concurrency

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

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

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

Soru
void add(int n) {
    std::____<std::mutex> lk(m);
    counter += n;
}
Cevap
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.

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