CodeBlanks Logo Icon CodeBlanks

std::thread

std::thread ile iş parçacığı oluşturmayı öğrenirsin.

std::thread

std::thread, ayrı bir yürütme iş parçacığı (thread) başlatır. Sözdizimi: std::thread t(func);. Burada func iş parçacığında çalışacak fonksiyondur. Ana iş parçacığı devam ederken t ayrı bir akışta yürür.

İş parçacığı bitene kadar beklemek için t.join(); çağrılır. join çağrılmazsa program sonlandığında std::terminate çalışır. detach ise iş parçacığını arka plana bırakır; bu durumda beklemek gerekmez ama sonuç senkronize edilemez. Yeni başlayanlar join kullanmalıdır.

İş parçacığı fonksiyonu

Bir iş parçacığı, herhangi bir callable (çağrılabilir) nesne alır: fonksiyon, lambda, fonksiyon nesnesi. Bağımsız değişkenler std::thread t(func, arg1, arg2); biçiminde verilir. İş parçacığı fonksiyonu void döndürürse sonuç alınmaz; değer döndürmek için std::async kullanılır.

İş parçacığı, ana akıştan bağımsızdır; aynı anda çalışır. Paylaşılan veriye erişimi varsa std::mutex ile korunmalıdır. Aksi halde veri yarışı (data race) oluşur ve davranış tanımsızdır. Bu, bir sonraki dersin konusudur.

Uygulama print_hello iş parçacığı

void print_hello() fonksiyonu yaz; gövdesi std::cout << "Merhaba"; olsun. main içinde std::thread t(print_hello); ile başlat ve t.join(); ile bekle. <thread> ve <iostream> başlıklarını ekle.

Başlangıç kodu

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

// print_hello fonksiyonunu yaz

int main() {
    // İş parçacığı başlat ve bekle
    return 0;
}

Örnek çözüm

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

void print_hello() {
    std::cout << "Merhaba";
}

int main() {
    std::thread t(print_hello);
    t.join();
    return 0;
}

Beklenen çıktı

Merhaba

Soru ve cevaplar

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

1 t.join() ne yapar?

main.cpp
std::thread t(func);
t.join();
  • İş parçacığını siler
  • İş parçacığını durdurur
  • İş parçacığı bitene kadar bekler Doğru cevap
  • Yeni iş parçacığı başlatır

Açıklama: join, iş parçacığı bitene kadar ana akışı bekletir.

2 join satırını tamamla

Soru
std::thread t(print_hello);
____;
Cevap
std::thread t(print_hello);
t.join;

Açıklama: t.join() iş parçacığını bekler.

3 İfadeyi rolüne eşle

Kavram Anlamı
std::thread t(func) İş parçacığı başlat
t.join() Bekle ve birleş
t.detach() Arka plana bırak
#include <thread> Başlık dosyası

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