C++: Multithreading

std::shared_future

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Dank std::shared_future ist es möglich, dass ein Promise mehrere Futures bedient.
04:27

Transkript

Das shared_future ist ein besonderer Future. Warum? Normal kann ein Promise nur ein Ergebnis produzieren, das von einem Future abgefragt wird. Beim shared_future ist es aber anders. In shared_future ist es möglich, dass ein Promise mehrere Futures bedient. Wie erzeugen Sie ein shared_future? Durch das, dass im bestimmten Future Fut haben und auf dem Share aufrufen. Was ist das besondere an schared_future? Sie können immer unabhängig voneinender einen assoziierten std::promise abfragen schared_future besitzen das gleiche Interface wie std::future, und Sie können sie auch direkt erzeugen. Dadurch dass sie sich den future von dem Promise geben lassen und shared_future anlegen im nicht mal future. Noch eine kleine Ergänzung. Unter diesem Link finden Sie weitere Informationen zum shared_future. Und los geht’s zum Beispiel. Ich fange mit der main Funktion an, da habe ich mein Promise, der ein int produziert. Diesen Promise verwende ich, um ein Future zu erzeugen. Und da ich mein Future jetzt wie ein shared_future annehme, wird divResult zu shared_future. Dann starte ich meinen Promise in einem eigenen Thread. Was macht dieser Thread? Er führt die Funktion div aus, und die Funktion div benötigt drei Argumente. Einen Promise und die Argumente 20 und 10. Was soll die Funktion div tun? Sie soll 20 durch 10 teilen, und divPromise verschickt das Ergebnis. Das schaue ich mir einmal schnell an. Das ist das Funktionsobjekt, das den Thread ausführt. Und das Funktionsobjekt benötigt einen Promise per Value Reference, 2 &&, zwei und-Symbole, int a und int b. Wenn b gleich 0 ist, schmeiße ich den Fehler. Wenn nicht, berechnet das Ergebnis: a geteilt durch b. OK. Was macht es zu Future? Ich habe hier ein Future, divResult. Und da es in shared_future ist, da schützt dieses shared_future die sog. Kombi-Semantik. Anders ausgedrückt, ich kann mein divResult kopieren. Genau das tue ich hier. Ich habe hier mein divResult. Ich kopiere ihn in SharedThread t1 - SharedThread t5 rein. Was macht SharedThread t1? Er führt die Funktionn req aus. Dividum als Argument, die future divResult bildet. Schauen wir uns schnell req an. Req ist die Instanz der Klasse Requestor. Also ist Requestor wieder ein Funktionsobjekt. Dieses Funktionsobjekt empfängt ein shared_future. In diesem Fall per Copy. Das ist möglich, da ich ein schared_future kopieren kann. Damit wir eine schöne Ausgabe sehen, habe ich das std::cout durch den lock_guard geschützt. So darf nur ein Thread zu einem Zeitpunkt auf std::cout schreiben. Und da schreibt er raus die Thread ID, was er schreibt ist interessant, weil wir dann wirklich sehen, dass jeder Future in einem anderen Thread ausgeführt wird. Und hier geht er damit um, dass das Ergebnis der Division ja NaND sein kann, not a number. In diesem Fall ist es aber kein Problem, weil 20 durch 10 ist natürlich wohldefiniert. Und das war es im Wesentlichen schon. Jetzt kümmert sich der Erzeugerset um die Lebenszeit seiner Künder, um diesen Thread und um diese fünf Threads. Nun führe ich das Programm noch aus. Das Programm ist sharedFuture, welches… Und Sie sehen, ich kann das Ergebnis von 1, 2, 3,4, 5 verschiedenen Threads abholen. Immer sharedFuture. Hier sehen Sie auch schön, dass tatsächlich immer ein anderes Thread ausgeführt wurde. In dieser Lektion habe ich Ihnen den sharedFuture vorgestellt. Der sharedFuture ist ein besonderer Future, und der Grund ist, dass wir in sharedFuture kopieren können.

C++: Multithreading

Lernen Sie die High-Level Threading-Schnittstelle in C++ kennenb und nutzen, die Sie in Form von Threads, Tasks, Locks und Bedingungsvariablen zur Anwendung bringen.

2 Std. 40 min (39 Videos)
Derzeit sind keine Feedbacks vorhanden...
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:16.08.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!