CodeBlanks Logo Icon CodeBlanks

std::future

std::future ve promise ile değer aktarımı öğrenirsin.

std::future

std::future<T>, henüz hesaplanmamış bir T sonucunu taşır. std::async veya std::promise ile oluşturulur. f.get() çağrıldığında sonuç hazır olana kadar bekler ve değeri döndürür.

get yalnızca bir kez çağrılabilir; ikinci çağrıda std::future_error fırlatılır. valid() ile future'ın hâlâ sonucu tutup tutmadığı kontrol edilir. wait() sonucu almadan yalnızca bekler; wait_for ve wait_until zaman aşımı verir. future, tek okuma senkronizasyonu için ideal bir araçtır.

promise ve future ilişkisi

std::promise<T>, sonucu ayarlayan taraf; std::future<T> sonucu okuyan taraftır. Bir promise'den p.get_future() ile future alınır; p.set_value(v) ile değer yazılır. Bu, eldeki veriyi başka bir iş parçacığına aktarmanın düşük seviyeli yoludur.

std::async bu ilişkiyi otomatik kurar; kullanıcı promise ve future'u doğrudan ele almaz. Ancak özel senkronizasyon gerektiğinde promise/future çifti manuel kullanılır. Bu, üretici-tüketici (producer-consumer) kalıbının temelidir. Her promise bir future ile eşleştirilir; birebir ilişki vardır.

Uygulama future ile sonuç al

int compute() yaz; gövdede return 100; olsun. main içinde std::future<int> f = std::async(std::launch::async, compute); yaz, sonra int result = f.get(); ile sonucu al ve std::cout << result; yaz.

Başlangıç kodu

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

// compute fonksiyonunu yaz

int main() {
    // future başlat, sonucu al ve yazdır
    return 0;
}

Örnek çözüm

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

int compute() {
    return 100;
}

int main() {
    std::future<int> f = std::async(std::launch::async, compute);
    int result = f.get();
    std::cout << result;
    return 0;
}

Beklenen çıktı

100

Soru ve cevaplar

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

1 get satırını tamamla

Soru
std::future<int> f = std::async(std::launch::async, compute);
int r = ____;
Cevap
std::future<int> f = std::async(std::launch::async, compute);
int r = f.get();

Açıklama: f.get() sonucu bekler ve döndürür.

2 future::get() ne yapar?

  • Sonucu siler
  • Yalnızca bekler
  • Sonucu bekler ve döndürür Doğru cevap
  • İş parçacığını başlatır

Açıklama: get() sonucu hazır olana kadar bekler ve değeri döndürür.

3 İfadeyi rolüne eşle

Kavram Anlamı
f.get() Sonucu al
f.wait() Sadece bekle
f.valid() Geçerli mi?
p.set_value(v) Değeri yaz

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