C++: Multithreading

Konstante Ausdrücke

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Konstante Ausdrücke werden zur Übersetzungszeit initialisiert und sind daher implizit threadsicher.
06:23

Transkript

In dieser Lektion würde ich Ihnen zeigen, wie Sie mit den konstanten Ausdrücken, sogenannten constexpression, sicherstellen können, dass Ihre Daten Threadsicher initialisiert werden. Das entscheidende bei konstanten Ausdrücke ist, dass sie zur Übersetzungszeit initialisiert werden können. Und das können auch hinreichend einfache eigene Datentypen sein. Hier sehen Sie ein Beispiel. Ich habe hier Datentyp meinTapel. Und indem ich den Konstruktor und die spezielle Funktion GetValue als constexpr deklariere, kann ich Instanzen von meinTapel zur Compile-Zeit instanziieren. Das heißt, meinTapel hier wird zur Compile-Zeit instanziiert und die Funktion meinTapel GetValue rufe ich auch zur Compile-Zeit auf. Und weil es zur Compile-Zeit passiert, ist ein sehr interessanter Sign-Effekt, dass die ganze Geschichte Threadsicher ist. Nun zeige ich Ihnen ein anspruchsvolles Programm, konstante Ausdrücke in der Anwendung. In dieser Lektion möchte ich Ihnen vorstellen, wie Sie mit konstanten Ausdrücken Threadsicher Ihre Daten initialisieren können. Ich gebe zu, das ist schon ein bisschen anspruchsvolleres Programm. Ich fang hier in der Main-Funktion mal an. Hier in der Main-Funktion verwende ich so genannte User-defined Literals. User-defined Literals sind ideale Kandidaten für konstante Ausdrücke. Dieses Literal hier definiert mir die Entfernung in Kilometer. Hier definiere ich mir die Entfernung Meter. Hier definiere ich mir die Entfernung 2000 Meter. Und die multipliziere ich noch mal 2. Im nächsten Schritt definiere ich mir die Distance per Week 1, 2, 3, 4. Warum mache ich das Ganze? Das Ganze mache ich aus dem Grund, weil es mich interessiert, wie viel Kilometer ich im Schnitt in einer Woche fahre. Und wie mache ich das? Indem ich den Durchschnitt über vier Wochen berechne. In der ersten Woche fahre ich viermal zur Arbeit, indem dreimal mit Abkürzung, gehe einmal zur Workout, und gehe einmal Shopping. Ehrlich gesagt, das ist gelogen. Okey. In der zweiten Woche mache ich was ähnliches, dritten auch. Ne, in der dritten und vierten habe ich wohl Urlaub gehabt. Da gehe ich viermal zu Workouts und zweimal zum Shopping, und dann fünfmal zu Workouts und einmal zum Shopping. So, jetzt der entscheidende Schritt. Ich habe eine Funktion GetAverageDistance, die Distance der ersten Woche, der zweiten, der dritten und der vierten Wochen annimmt, und den Schnittbild mir jetzt zur Verfügung stellt. Und nun wird es durch Konstanten ausdrücken. Ich habe hier explizit constexpression markiert, und Sie sehen, wenn Sie der gelben Farbe folgen, alles, mit der kleinen Ausnahme, ist hier constexpr. Die kleine Ausnahme ist die Ausgabe Operator, der kann eben nicht zur Compile-Zeit ausgeführt werden. Alles andere kann ich zur Compile-Zeit ausführen. Und das Ergebnis ist, dass die ganze Kalkulation, das Ergebnis hier zur Compile-Zeit ausgerechnet wird. Und damit ist es implizit Threadsicher. Bevor ich Ihnen ab jetzt die Applikation in der Anwendung zeige, möchte ich Ihnen noch ein paar Worte zur Benutzung den definierten Literalen sagen. Was macht der Compiler? Wenn der Compiler so einen Ausdruck, wie 5400_m, sieht, versucht er diesen Ausdruck auf ein Literal-Operator zu mappen. Das ist sozusagen Operator-Überladung. Und wenn Sie jetzt hier hoch schauen, sehen Sie, den entsprechenden Operator habe ich hier definiert. Leerzeichen, Unterstrich, m - entspricht genau diesen Wert. Das haben wir natürlich für Meter, Kilometer, Dezimeter und Zentimeter gemacht. Für Meter es ist relativ einfach. Weil ich wähle Körper und Funktionskörper dieses Literal-Operators mein Distance instanziieren. Meter auf Meter, hier muss ich nichts konvertieren. Wenn ich hingegen Kilometer annehme, muss ich natürlich den Kilometer in den Meter konvertieren, da der Meter für mich die Grundeinheit ist. Das Gleiche ist natürlich für Dezimeter und für Zentimeter. Ja, und dann ist die Frage, wie klappt das Rechnen hier, zum Beispiel ist Plus hier. Hier habe ich links Workout, ich benutze ein definiertes Literal, und rechts ich benutze ein definiertes Literal. Und diese Operation habe ich natürlich hier auch all-definiert. So noch mal, Operator-Überladung unter Anwendung. So jetzt möchte ich Ihnen das Programm in der Anwendung zeigen, aber jetzt habe ich ein Problem. Hier setze ich insbesondere mit dieser Funktion hier Feature voraus, die C++ 14 Compiler kann. Und meiner kann C++ 14 nur teilweise. Hmm. Was mache ich jetzt? Kein Problem, ich schnappe mal diesen Code, gehe Online auf cppreference.com, in diesem Fall auf die Unterseite constexpr. Und das Schöne daran ist, dass sie meistens zum Compiler eingebaut ist, und das sehen Sie hier. Wenn ich jetzt diesen Code laufen lasse, der Code interessiert mich exakt gar nicht, dann kann ich hier den Compiler auswählen, der mich interessiert. Jetzt wähle ich eben ein aus, der C++ versteht. Dann nehme ich den 138 mit C++ 14, das heißt der Compiler wird jetzt auch mit dem Flag C++ 14 aufgerufen. Nun jetzt muss ich nur noch mein Code hereinbekommen. Das war es. Und dann lasse ich es laufen, das Progrämmchen. Und Sie sehen nun, ich fahre pro Woche 255900 Meter, sprich 255 Kilometer, ungefähr. In dieser Lektion habe ich Ihnen gezeigt, wie Sie konstante Ausdrücke verwenden können um Daten Threadsicher zu initialisieren. Threadsicher aus dem Grund, weil die ganze Geschichte zur Compile-Zeit geschieht.

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!