Tasks

Eine noch höhere Stufe der Abstraktion vermeidet das Konzept von threads und verwendet anstatt den Begriff tasks. Betrachten wir folgendes Beispiel:


#include <iostream>
#include <future>
#include <chrono>
using namespace std;

int square(int x) {
    return x * x;
}

int main() {
    auto a = async(&square, 10);
    int v = a.get();

    cout << "The thread returned " << v << endl;
    return 0;
}

Der async Befehl verwendet ein Objektpaar, welche promise und future genannt werden. Der promise macht eine ``Versprechung'' irgendwann einen Wert zurückzugeben. Der future ist mit dem promise verbunden und kann zu jeder Zeit versuchen, den versprochenen Wert mit der Methode get() zu erhalten. Wenn der promise noch nicht erfüllt ist, wird der future auf diesen warten, bis der Wert erhältlich ist. async verbirgt das meiste hiervon außer dem Rückgabewert, der in diesem Fall ein Objekt vom Typ future<int> ist. Auch hier kann auto verwendet werden.

Ein weiteres Beispiel zu tasks und deren Ausführung wird in den Übungsaufgaben besprochen, Dort wird auch auf die Verwendung von this_thread eingegangen.




GDuckeck 2019-08-01