std::thread
- C++ kursu
- İleri seviye
- Ders 19/83
- 5 dk
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
#include <iostream>
#include <thread>
// print_hello fonksiyonunu yaz
int main() {
// İş parçacığı başlat ve bekle
return 0;
}Örnek çözüm
#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?
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
std::thread t(print_hello);
____;
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ı |