Multi-Threading wie in C++11
|
|
- Ulrike Haupt
- vor 7 Jahren
- Abrufe
Transkript
1 Multi-Threading wie in C++11 Franco Chiappori Embedded Computing Conference 2013
2 Reiseroute Guards Lock-Free Data Structures Futures Promises Atomic Types Memory Barriers Compiler / Prozessor
3 Compiler / Hardware Code Prozessor Compiler
4 Out-of-Order Ausführung int data; bool isdatavalid = false; // Processor or thread #1 while (!isdatavalid) {; printf("%d", data); // Processor or thread #2 data = 42; isdatavalid = true; Wegen out-of-order Ausführung kann ein anderer Wert als 42 ausgegeben werden. Kann auch durch Cache Management verursacht sein.
5 Out-of-Order Ausführung int data; bool isdatavalid = false; // Processor or thread #1 while (!isdatavalid) {; printf("%d", data); // Processor or thread #2 data = 42; isdatavalid = true; Wegen out-of-order Ausführung kann ein anderer Wert als 42 ausgegeben werden. Kann auch durch Cache Management verursacht sein.
6 Out-of-Order Ausführung int data; bool isdatavalid = false; // Processor or thread #1 while (!isdatavalid) {; printf("%d", data); // Processor or thread #2 data = 42; isdatavalid = true; Wegen out-of-order Ausführung kann ein anderer Wert als 42 ausgegeben werden. Kann auch durch Cache Management verursacht sein.
7 Out-of-Order Ausführung int data; bool isdatavalid = false; // Processor or thread #1 while (!isdatavalid) {; printf("%d", data); // Processor or thread #2 data = 42; isdatavalid = true; Wegen out-of-order Ausführung kann ein anderer Wert als 42 ausgegeben werden. Kann auch durch Cache Management verursacht sein.
8 Out-of-Order Ausführung int data; bool isdatavalid = false; // Processor or thread #1 while (!isdatavalid) {; printf("%d", data); // Processor or thread #2 data = 42; isdatavalid = true; Wegen out-of-order Ausführung kann ein anderer Wert als 42 ausgegeben werden. Kann auch durch Cache Management verursacht sein.
9 Out-of-Order Ausführung int data; bool isdatavalid = false; // Processor or thread #1 while (!isdatavalid) {; printf("%d", data); // Processor or thread #2 data = 42; isdatavalid = true; Wegen out-of-order Ausführung kann ein anderer Wert als 42 ausgegeben werden. Kann auch durch Cache Management verursacht sein.
10 Memory Barriers
11 Re-Ordering mit Memory Barriers verhindern int data; std::atomic<bool> isdatavalid(false); // Thread #1 while (!isdatavalid.load(std::memory_order_relaxed)) {; std::atomic_thread_fence(std::memory_order_acquire); printf("%d", data); // Thread #2 data = 42; std::atomic_thread_fence(std::memory_order_release); isdatavalid.store(true, std::memory_order_relaxed);
12 Re-Ordering mit Memory Barriers verhindern int data; std::atomic<bool> isdatavalid(false); // Thread #1 while (!isdatavalid.load(std::memory_order_relaxed)) {; std::atomic_thread_fence(std::memory_order_acquire); printf("%d", data); // Thread #2 data = 42; std::atomic_thread_fence(std::memory_order_release); isdatavalid.store(true, std::memory_order_relaxed);
13 Re-Ordering mit Memory Barriers verhindern int data; std::atomic<bool> isdatavalid(false); // Thread #1 while (!isdatavalid.load(std::memory_order_relaxed)) {; std::atomic_thread_fence(std::memory_order_acquire); printf("%d", data); // Thread #2 data = 42; std::atomic_thread_fence(std::memory_order_release); isdatavalid.store(true, std::memory_order_relaxed); «Happens before»
14 Re-Ordering mit Memory Barriers verhindern int data; std::atomic<bool> isdatavalid(false); // Thread #1 while (!isdatavalid.load(std::memory_order_relaxed)) {; std::atomic_thread_fence(std::memory_order_acquire); printf("%d", data); // Thread #2 data = 42; std::atomic_thread_fence(std::memory_order_release); isdatavalid.store(true, std::memory_order_relaxed); «Happens before» «Synchronizes with»
15 Re-Ordering mit Memory Barriers verhindern int data; std::atomic<bool> isdatavalid(false); // Thread #1 while (!isdatavalid.load(std::memory_order_relaxed)) {; std::atomic_thread_fence(std::memory_order_acquire); printf("%d", data); // Thread #2 data = 42; std::atomic_thread_fence(std::memory_order_release); isdatavalid.store(true, std::memory_order_relaxed); «Happens before» «Synchronizes with»
16 Atomare Typen
17 Synchronisation mit atomaren Typen std::atomic<int> data(0); std::atomic<bool> isdatavalid(false); // Thread #1 while (!isdatavalid.load()) {; printf("%d", data.load()); // Thread #2 data.store(42); isdatavalid.store(true); Memory Barriers und Atomare Typen sind low-level Konstrukte Ihr Einsatz erfordert gute Kenntnisse und sorgfältiges Design Geeignet, um bewiesene Flaschenhälse zu optimieren
18 Futures
19 Synchroner Aufruf Client Server synchronous call return value
20 Asynchroner Aufruf Client Server asynchronous call return value?
21 Einsatz von Futures int calculate() { // Some lengthy calculations... return 42; int main() { std::future<int> result = std::asynch(calculate); // Do something else... printf("the result is: %d", result.get()); return 0;
22 Einsatz von Futures int calculate() { // Some lengthy calculations... return 42; int main() { std::future<int> result = std::asynch(calculate); // Do something else... printf("the result is: %d", result.get()); return 0;
23 Einsatz von Futures int calculate() { // Some lengthy calculations... return 42; int main() { std::future<int> result = std::asynch(calculate); // Do something else... printf("the result is: %d", result.get()); return 0;
24 Einsatz von Futures int calculate() { // Some lengthy calculations... return 42; int main() { std::future<int> result = std::asynch(calculate); // Do something else... printf("the result is: %d", result.get()); return 0;
25 Promises
26 Einsatz von Promises std::promise<int> resultpromise; // Thread #1 void calculate() { // Some lengthy calculations... resultpromise.set_value(42); // Thread #2 void printresult() { std::future<int> result = resultpromise.get_future(); // Do something else... printf("the result is: %d", result.get());
27 Einsatz von Promises std::promise<int> resultpromise; // Thread #1 void calculate() { // Some lengthy calculations... resultpromise.set_value(42); // Thread #2 void printresult() { std::future<int> result = resultpromise.get_future(); // Do something else... printf("the result is: %d", result.get());
28 Einsatz von Promises std::promise<int> resultpromise; // Thread #1 void calculate() { // Some lengthy calculations... resultpromise.set_value(42); // Thread #2 void printresult() { std::future<int> result = resultpromise.get_future(); // Do something else... printf("the result is: %d", result.get());
29 Einsatz von Promises std::promise<int> resultpromise; // Thread #1 void calculate() { // Some lengthy calculations... resultpromise.set_value(42); // Thread #2 void printresult() { std::future<int> result = resultpromise.get_future(); // Do something else... printf("the result is: %d", result.get());
30 Einsatzgebiet von Futures/Promises Arbeitslast auf mehrere Threads verteilen Arbeitslast flexibel aufteilen Auf Background Thread warten Beachten: future::get() kann blockieren Alternativen: Message Queue (Actor Model) Synchrone Aufrufe
31 Guards
32 Einsatz von Guards std::deque<int> somequeue; std::mutex queuemutex; bool queuepeek(int& value) { std::lock_guard<std::mutex> guard(queuemutex); if (somequeue.empty()) { return false; value = somequeue.front(); somequeue.pop_front(); return true;
33 Einsatz von Guards std::deque<int> somequeue; std::mutex queuemutex; bool queuepeek(int& value) { std::lock_guard<std::mutex> guard(queuemutex); if (somequeue.empty()) { return false; value = somequeue.front(); somequeue.pop_front(); return true;
34 Einsatz von Guards std::deque<int> somequeue; std::mutex queuemutex; bool queuepeek(int& value) { std::lock_guard<std::mutex> guard(queuemutex); if (somequeue.empty()) { return false; value = somequeue.front(); somequeue.pop_front(); return true;
35 Einsatz von Guards std::deque<int> somequeue; std::mutex queuemutex; bool queuepeek(int& value) { std::lock_guard<std::mutex> guard(queuemutex); if (somequeue.empty()) { return false; value = somequeue.front(); somequeue.pop_front(); return true;
36 Einsatz von Guards std::deque<int> somequeue; std::mutex queuemutex; bool queuepeek(int& value) { std::lock_guard<std::mutex> guard(queuemutex); if (somequeue.empty()) { return false; value = somequeue.front(); somequeue.pop_front(); return true;
37 Lock-Free Data Structures
38 Read-Copy-Update: Einfügen in einfach verkettete Liste 2) 1)
39 RCU: Entfernen aus einfach verketteter Liste 1) 2) Wann kann das Element gelöscht werden? Benutzte Techniken: rcu_read_lock / rcu_read_unlock std::shared_pointer garbage collection
40 Einsatzgebiet für Read-Copy-Update
41 Eisatzgebiet für Lock-Free Data Structures
42 Reiseroute Guards Lock-Free Data Structures Futures Promises Atomic Types Memory Barriers Compiler / Prozessor
43
44 Kernpunkte Synchronisation via Betriebssystem Threads gezielt einsetzen Performance messen
45 Referenz
46 Gute Heimreise!
47 Bildnachweis Hausabbruch: Wiki Media, Benutzer Rupp.de Atom: Wiki Media, Benutzer Halfdan / Indolences Ufo: Wiki Media, Benutzer Michael Salone Drei Eidgenossen: Parlamentsdienste, 3003 Bern Palastwachen: Wiki Media, Benutzer Ibagli Chain Gang: Wiki Media, Autor unbekannt Stoppuhr: Wiki Media, Benutzer Tasma3197 Gipfelbild Pilatus: Wiki Media, Benutzer Toby87 Kabine Pilatusbahn: Wiki Media, Benutzer The wub Pilatus, Barriere, Telefonbuch, C++ Concurrency Buch: Franco Chiappori, 6048 Horw
C++ atomics, Boost.Lookfree, Hazard-Pointers und die Thread-Hölle
C++ atomics, Boost.Lookfree, Hazard-Pointers und die Thread-Hölle Aachen, den 14. Januar 2016 Max Neunhöffer www.arangodb.com Unser Problem heute Es war einmal... eine multi-threaded Applikation, mit einer
MehrMemory Models Frederik Zipp
Memory Models Frederik Zipp Seminar: Programmiersprachen für Parallele Programmierung (SS 2010) Fakultät für Informatik - IPD SNELTING LEHRSTUHL PROGRAMMIERPARADIGMEN 1
MehrDas C++- Speichermodell. Rainer Grimm Schulungen, Coaching und Technologieberatung
Das C++- Speichermodell Rainer Grimm Schulungen, Coaching und Technologieberatung Multithreading mit C++11 C++'s Antwort auf die Anforderungen der Multicore- Architekturen. Ein definiertes Speichermodell
MehrOperating Systems Principles C11
Humboldt University Computer Science Department Operating Systems Principles C11 Lab 0 - Auswertung Make Das Unix-Tool make bietet die Möglichkeit mehrere, voneinander unabhängige Jobs (z.b. das Übersetzen
MehrBest Practices. Rainer Grimm Training, Coaching und Technologieberatung
Best Practices Rainer Grimm Training, Coaching und Technologieberatung www.modernescpp.de Best Practices Allgemein Multithreading Parallelität Speichermodell Best Practices Allgemein Multithreading Speichermodell
MehrBest Practices. Rainer Grimm Training, Coaching und Technologieberatung
Best Practices Rainer Grimm Training, Coaching und Technologieberatung www.modernescpp.de Best Practices Allgemein Multithreading Parallelität Speichermodell Best Practices Allgemein Multithreading Speichermodell
MehrDatenstrukturen und Algorithmen
1 Datenstrukturen und Algorithmen Übung 13 FS 2018 Programm von heute 2 1 Feedback letzte Übung 2 Wiederholung Theorie 3 Nächste Übung 1. Feedback letzte Übung 3 Aufgabe 12.3: Summe eines Vektors void
MehrJava Concurrency Utilities
Java Concurrency Utilities Java unterstützt seit Java 1.0 Multithreading Java unterstützt das Monitorkonzept mittels der Schlüsselworte synchronized und volatile sowie den java.lang.object Methoden wait(),
MehrRead-Copy-Update (RCU)
Read-Copy-Update (RCU) Seminar Konzepte von Betriebssystem-Komponenten: Konkurrenz und Koordinierung in Manycore-Systemen Alexander Richardson Friedrich-Alexander-Universität Erlangen-Nürnberg 11. Juli
MehrRepetitorium Programmieren I + II
Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 6. März 2012 Agenda 1 Operatoren 2 Datentypen Gleitpunkt Zahl Typkonvertierung 3 Strommanipulatoren 4 Bedingungen if-else switch-case
MehrStädtisches Gymnasium Olpe Java Ht Informatik - Q1 Die Klasse List im Abitur Methoden und Beispielcode Hier alle wichtigen Methoden. Ein Beispielcode
Die Klasse List im Abitur Methoden und Beispielcode Hier alle wichtigen Methoden. Ein Beispielcode folgt im Anschluss. Beispielcode Es gibt eine Klasse Benutzerverwaltung, welche eine Liste mit Benutzern
MehrLinked Lists The Role of Locking
Clara Lüling, Stephan Bittner Linked Lists The Role of Locking Verkettete Liste - Die Rolle des Sperrens Gliederung Linked Lists The Role of Locking 1. Verkettete Listen 2. Algorithmen 1. Coarse-Grained
MehrAsync und Await Asynchrone Programmierung in C# 5
Async und Await Asynchrone Programmierung in C# 5 Prof. Dr. Luc Bläser Hochschule für Technik Rapperswil Parallel 2014, Karlsruhe 06. Mai 2014 Ausgangslage Async/Await Sprachkonstrukte Institutionalisiert
MehrVerteilte Systeme Teil 2
Distributed Computing HS 2012 Prof. Dr. Roger Wattenhofer, Dr. Thomas Locher C. Decker, B. Keller, S. Welten Prüfung Verteilte Systeme Teil 2 Freitag, 8. Februar 2013 9:00 12:00 Die Anzahl Punkte pro Teilaufgabe
MehrProzesse und Threads. wissen leben WWU Münster
Münster Multi Threading in C++ 1 /19 Prozesse und Threads Ein Unix-Prozess hat IDs (process,user,group) Umgebungsvariablen Verzeichnis Programmcode Register, Stack, Heap Dateideskriptoren, Signale message
MehrNebenläufige Programme mit Python
Nebenläufige Programme mit Python PyCon DE 2012 Stefan Schwarzer, SSchwarzer.com info@sschwarzer.com Leipzig, Deutschland, 2012-10-30 Nebenläufige Programme mit Python Stefan Schwarzer, info@sschwarzer.com
Mehr16. Dynamische Datenstrukturen
Datenstrukturen 6. Dynamische Datenstrukturen Eine Datenstruktur organisiert Daten so in einem Computer, dass man sie effizient nutzen kann. Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange
MehrAngewandte Mathematik und Programmierung
Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Operatoren Operatoren führen Aktionen mit Operanden aus. Der
MehrNeues vom STRIP Forth-Prozessor
Neues vom STRIP Forth-Prozessor Tagung der Forth-Gesellschaft März 2014 Bad Vöslau/Österreich Willi Stricker -Prozessor Inhalt 1. STRIP-Befehlssatz Bisher: minimaler Befehlssatz neu: erweiterter Befehlssatz
Mehr.NET Task Parallel Library: Eine Rundtour
.NET Parallel Library: Eine Rundtour Luc Bläser Hochschule für Technik Rapperswil Parallel 2015 Konferenz 23. Apr. 2015, Karlsruhe Die.NET Parallel Library (TPL) Stand der Technik für.net Parallelprogrammierung
MehrProgrammier-Befehle - Woche 10
Funktionen Rekursion Selbstaufruf einer Funktion Jeder rekursive Funktionsaufruf hat seine eigenen, unabhängigen Variablen und Argumente. Dies kann man sich sehr gut anhand des in der Vorlesung gezeigten
Mehr13. Dynamische Datenstrukturen
Motivation: Stapel. Dynamische Datenstrukturen Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange, Sortierte Liste 40 40 Motivation: Stapel ( push, pop, top, empty ) Wir brauchen einen neuen
MehrCilk Sprache für Parallelprogrammierung. IPD Snelting, Lehrstuhl für Programmierparadigmen
Cilk Sprache für Parallelprogrammierung IPD Snelting, Lehrstuhl für Programmierparadigmen David Soria Parra Geschichte Geschichte Entwickelt 1994 am MIT Laboratory for Computer Science Cilk 1: Continuations
MehrInformatik I: Einführung in die Programmierung
Informatik I: Einführung in die Programmierung 5., bedingte Ausführung und Albert-Ludwigs-Universität Freiburg Bernhard Nebel 27. Oktober 2017 1 und der Typ bool Typ bool Typ bool Vergleichsoperationen
MehrHeap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen
Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrÜbungsstunde: Informatik 1 D-MAVT
Übungsstunde: Informatik 1 D-MAVT Daniel Bogado Duffner Übungsslides unter: n.ethz.ch/~bodaniel Bei Fragen: bodaniel@student.ethz.ch Daniel Bogado Duffner 21.03.2018 1 Ablauf Quiz und Recap Floating Point
MehrHeap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen
Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrIntroduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016
to to May 2016 to What is Programming? All computers are stupid. All computers are deterministic. You have to tell the computer what to do. You can tell the computer in any (programming) language) you
MehrProzesszustände (1a)
Prozesszustände (1a) NOT EXISTING DELETED CREATED Meta-Zustand (Theoretische Bedeutung) Prozesszustände Multiuser Umfeld (1c) Hintergrund-Prozess - der Prozess startet im Hintergrund - my-commandbin &
MehrJavaLand,
KOROUTINEN MIT KOTLIN JavaLand, 2018 @RenePreissel https://github.com/rpreissel/kotlin-coroutine.git INHALT Warum Koroutinen? Umsetzung von Koroutinen in Kotlin Asynchrone Kommunikationsmuster mit Koroutinen
MehrPraxis der Programmierung
Dynamische Datentypen Institut für Informatik und Computational Science Universität Potsdam Henning Bordihn Einige Folien gehen auf A. Terzibaschian zurück. 1 Dynamische Datentypen 2 Dynamische Datentypen
MehrNicht-blockierende Synchronisation für Echtzeitsysteme
Nicht-blockierende Synchronisation für Echtzeitsysteme Seminar Mobile Systeme Florian Schricker 15. März 2005 Seminarleiter: Prof. Dr. Dieter Zöbel 1 INHALTSVERZEICHNIS INHALTSVERZEICHNIS Inhaltsverzeichnis
MehrMultithreading, richtig gemacht? Rainer Grimm
Multithreading, richtig gemacht? Rainer Grimm Überblick Threads Geteilte Variablen Thread lokale Daten Bedingungsvariablen Promise und Future Speichermodell Threads Benötigt ein Arbeitspaket und startet
MehrIch liebe Java && Ich liebe C# Rolf Borst
Ich liebe Java && Ich liebe C# Rolf Borst Java oder C#? Einführung public class Einfuehrung { private int gesamtzahl = 0; /* Ermittelt die Anzahl der geraden und durch drei teilbaren Zahlen */ public String
Mehr6 Speicherorganisation
6 Speicherorganisation Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrKontrollfragen Mikrocontroller Programmiersprache C H1203 Felix Rohrer
Block 1 1. Welcher Wert hat w? int w = 034; 28 (Dezimal) 034 wird als Octal interpretiert 34oct = 28dec 2. Wie lauten die Ergebnisse? unsigned int a = 3, b = 5, c = 7; unsigned int x, y, z; x = a == 3;
MehrÜbung zu Betriebssystemtechnik
Übung zu Betriebssystemtechnik Nachrichtenaustausch und Copy-on-Write 11. Juni 28 Andreas Ziegler Bernhard Heinloth Lehrstuhl für Informatik 4 Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl
MehrRepetitorium Programmieren I + II
Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 24. September 2012 Agenda 1 Funktionen Aufbau und Anwendung Call by Value Call by Reference Überladen von Funktionen Default
Mehr28. Parallel Programming II
28. Parallel Programming II C++ Threads, Gemeinsamer Speicher, Nebenläufigkeit, Exkurs: Lock Algorithmus (Peterson), Gegenseitiger Ausschluss Race Conditions [C++ Threads: Williams, Kap. 2.1-2.2], [C++
MehrAusnahmebehandlung in Java
Ausnahmebehandlung in Java class A { void foo() throws Help, SyntaxError {... class B extends A { void foo() throws Help { if (helpneeded()) throw new Help();... try {... catch (Help e) {... catch (Exception
MehrProgrammieren in Java
Ein Projekt 2 Wiederholung: new-operator Werte nicht-primitiver Datentypen müssen mit new erzeugt werden Es gibt keine Möglichkeit primitive Daten mit new zu erzeugen Beispiele int[] myarray = new int[]
MehrEinführung in C. EDV1-04C-Einführung 1
Einführung in C 1 Helmut Erlenkötter C Programmieren von Anfang an Rowohlt Taschenbuch Verlag ISBN 3-4993 499-60074-9 19,90 DM http://www.erlenkoetter.de Walter Herglotz Das Einsteigerseminar C++ bhv Verlags
MehrGrundlagen der Informatik 12. Strukturen
12. Strukturen Strukturen und deren Komponenten Strukturen im Projekt Dynamisch erstellte Strukturen Strukturen und Operatoren Strukturen und Funktionen Einfach verkettete Liste Grundlagen der Informatik
Mehr- Welche konkreten Invarianten müssen gelten? Berücksichtigen: Invarianten aus Modell und Implem.
234 Implementierung von Abstrakten Datentypen und Korrektheitskriterien Ziel: Zusammenhang zwischen Spezifikation (Modell!) und Implementierung(en) herstellen Spezifikation Implementierung abstraktes Modell?
MehrInformatik 1 D- ITET. Übung 9. Christoph Zimmerli Büro: IFW D46.2 hcp://blogs.ethz.ch/infitet09/
Informatik 1 D- ITET Übung 9 Christoph Zimmerli Büro: IFW D46.2 zimmerli@inf.ethz.ch hcp://blogs.ethz.ch/infitet09/ 2 Heute Nachbesprechung Übung 7 Vorbesprechung Übung 9 3 Übung 7 EKG- Daten filtern.
MehrBeispielvortrag: HPCG auf Intel Haswell-EP
Beispielvortrag: HPCG auf Intel Haswell-EP Johannes Hofmann 1 Seminarvortrag Architekturen von Multi- und Vielkern-Prozessoren Erlangen, 19.4.2016 1 Computer Architecture, University Erlangen-Nuremberg
MehrAnwendung (2. Versuch:-) Entkopplung der Locks
Gut gemeint aber leider fehlerhaft... Jeder Producer benötigt zwei Locks gleichzeitig, um zu produzieren: 1. dasjenige für den Puffer; 2. dasjenige für einen Semaphor. Musser fürden Semaphor einwait()
MehrBetriebssysteme. Vorlesung im Herbstsemester 2010 Universität Mannheim. Kapitel 6: Speicherbasierte Prozessinteraktion
Betriebssysteme Vorlesung im Herbstsemester 2010 Universität Mannheim Kapitel 6: Speicherbasierte Prozessinteraktion Felix C. Freiling Lehrstuhl für Praktische Informatik 1 Universität Mannheim Vorlesung
MehrÜbungsstunde: Informatik 1 D-MAVT
Übungsstunde: Informatik 1 D-MAVT Daniel Bogado Duffner Übungsslides unter: n.ethz.ch/~bodaniel Bei Fragen: bodaniel@student.ethz.ch Daniel Bogado Duffner 25.04.2018 1 Ablauf Self-Assessment Pointer Iterators
MehrAsynchrone Programmierung mit Async und Await in C# 5 unter der Lupe
Asynchrone Programmierung mit Async und Await in C# 5 unter der Lupe Prof. Dr. Luc Bläser Hochschule für Technik Rapperswil Parallel 2013, Karlsruhe 16. Mai 2013 Ausgangslage Async/Await Sprachkonstrukte
MehrProgrammieren in C. Rekursive Strukturen. Prof. Dr. Nikolaus Wulff
Programmieren in C Rekursive Strukturen Prof. Dr. Nikolaus Wulff Rekursive Strukturen Häufig müssen effizient Mengen von Daten oder Objekten im Speicher verwaltet werden. Meist werden für diese Mengen
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine
MehrLösungshinweise/-vorschläge zum Übungsblatt 13: Software-Entwicklung 1 (WS 2017/18)
Dr. Annette Bieniusa Mathias Weber, M. Sc. Peter Zeller, M. Sc. TU Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungshinweise/-vorschläge zum Übungsblatt 13: Software-Entwicklung 1 (WS 2017/18)
MehrProgrammieren I. Kapitel 13. Listen
Programmieren I Kapitel 13. Listen Kapitel 13: Listen Ziel: eigene Datenstrukturen erstellen können und eine wichtige vordefinierte Datenstruktur( familie) kennenlernen zusammengehörige Elemente zusammenfassen
MehrÜberraschungen und Grundlagen bei der nebenläufigen Programmierung in Java
Überraschungen und Grundlagen bei der nebenläufigen Programmierung in Java JUG Karlsruhe 16. Oktober 2013 Referent: Christian Kumpe Inhalt des Vortrags Was zeigt dieser Vortrag? Ein einfaches Beispiel
MehrSchnittstellen, Stack und Queue
Schnittstellen, Stack und Queue Schnittstelle Stack Realisierungen des Stacks Anwendungen von Stacks Schnittstelle Queue Realisierungen der Queue Anwendungen von Queues Hinweise zum Üben Anmerkung: In
MehrLock-free Datenstrukturen
Lock-free Datenstrukturen Eine Einführung in die lock-free Programmierung Burak Ok Friedrich-Alexander Universität Erlangen-Nürnberg (FAU) 24. Januar 2017 burak.ok@fau.de Lock-free Datenstrukturen (24.
MehrDatenkapselung: public / private
627 18. Klassen Klassen, Memberfunktionen, Konstruktoren, Stapel, verkettete Liste, dynamischer Speicher, Copy-Konstruktor, Zuweisungsoperator, Destruktor, Konzept Dynamischer Datentyp Datenkapselung:
MehrIntroduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2018
to to May 2018 to What is Programming? All computers are stupid. All computers are deterministic. You have to tell the computer what to do. You can tell the computer in any (programming) language) you
MehrProgrammier-Befehle - Woche 08
Datentypen Vektoren (mehrdim.) eines bestimmten Typs Erfordert: #include Wichtige Befehle: Definition: std::vector my vec (n rows, std::vector(n cols, init value)) Zugriff:
MehrThreads. Netzwerk - Programmierung. Alexander Sczyrba Jan Krüger
Netzwerk - Programmierung Threads Alexander Sczyrba asczyrba@cebitec.uni-bielefeld.de Jan Krüger jkrueger@cebitec.uni-bielefeld.de Übersicht Probleme mit fork Threads Perl threads API Shared Data Mutexes
MehrKurze Einführung in die Programmiersprache C++ und in Root
Kurze Einführung in die Programmiersprache C++ und in Root Statistik, Datenanalyse und Simulation; 31.10.2006 Inhalt 1 Einführung in die Programmiersprache C++ Allgemeines Variablen Funktionen 2 1 Einführung
Mehr1 of :17:14
7 public class Main 10 /** 11 * @param args the command line arguments 1 */ 13 public static void main(string[] args) 14 { 15 // Aufgabe 1 16 System.out.println("##### AUFGABE 1 #####"); 17 // Stack initialisieren
MehrObjektorientierte Programmierung
Objektorientierte Programmierung Ausnahmebehandlung und Nebenläufigkeit 9. Vorlesung am 15. Dezember 2010 Ausnahmebehandlung in Java class A { void foo() throws Help, SyntaxError {... class B extends A
MehrBeispiel für überladene Methode
Beispiel für überladene Methode class Gras extends Futter {... abstract class Tier { public abstract void friss (Futter x); class Rind extends Tier { public void friss (Gras x) {... public void friss (Futter
MehrDynamische Datentypen
Dynamische Datentypen Tupel und Folgen o Wertebereich eines Structs / einer Klasse: T1 T2... Tk Werte sind k-tupel Tupel und Folgen o Wertebereich eines Structs / einer Klasse: T1 T2... Tk Werte sind k-tupel
MehrEinführung in die Informatik
Einführung in die Informatik Jochen Hoenicke Software Engineering Albert-Ludwigs-University Freiburg Sommersemester 2014 Jochen Hoenicke (Software Engineering) Einführung in die Informatik Sommersemester
MehrUniversität Karlsruhe (TH)
Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 OpenMP-Programmierung Teil III Multikern-Praktikum Wintersemester 06-07 Inhalt Was ist OpenMP? Parallele Regionen Konstrukte zur Arbeitsteilung
MehrÜbung zu Grundlagen der Betriebssysteme. 10. Übung 18.12.2012
Übung zu Grundlagen der Betriebssysteme 10. Übung 18.12.2012 Aufgabe 1 a) Was versteht man unter einem kritischen Abschnitt oder kritischen Gebiet (critical area)? b) Welche Aufgabe hat ein Semaphor? c)
MehrEinführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz
Patrick Schulz patrick.schulz@paec-media.de 29.04.2013 1 Einführung Einführung 2 3 4 Quellen 1 Einführung Einführung 2 3 4 Quellen Hello World in Java Einführung 1 public class hello_ world 2 { 3 public
MehrAbstrakte C-Maschine und Stack
Abstrakte C-Maschine und Stack Julian Tobergte Proseminar C- Grundlagen und Konzepte, 2013 2013-06-21 1 / 25 Gliederung 1 Abstrakte Maschine 2 Stack 3 in C 4 Optional 5 Zusammenfassung 6 Quellen 2 / 25
Mehr1. Die rekursive Datenstruktur Liste
1. Die rekursive Datenstruktur Liste 1.4 Methoden der Datenstruktur Liste Die Warteschlange (Queue) ist ein Sonderfall der Datenstruktur Liste. Bei der Warteschlange werden Einfügen und Entfernen nach
MehrDatenstrukturen und Algorithmen
1 Datenstrukturen und Algorithmen Übung 12 FS 2018 Programm von heute 2 1 Feedback letzte Übung 2 Wiederholung Theorie 3 Programmieraufgaben 1. Feedback letzte Übung 3 Fussballmeisterschaft 4 Verein Punkte
MehrInformatik - Übungsstunde
Informatik - Übungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zürich Woche 08-25.04.2018 Lernziele const: Reference const: Pointer vector: iterator using Jonas Lauener (ETH Zürich) Informatik
MehrC++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22
C++ Teil 2 Sven Groß IGPM, RWTH Aachen 16. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 2 16. Apr 2015 1 / 22 Themen der letzten Vorlesung Hallo Welt Elementare Datentypen Ein-/Ausgabe Operatoren Sven
MehrNachname: Vorname: Matr.-Nr.: Punkte: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende Struktogramm zur Berechnung von sin(x) mit Hilfe einer Reihe.
Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende
MehrNebenläufige und verteilte Programme CS2301
Nebenläufige und verteilte Programme CS2301 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Netze mit aktiven und reaktiven Knoten Produzent Konsument: aktiv / passiv / reaktiv
MehrCONCURRENCY MODELS. Auf der Suche nach dem heiligen Gral der ManyCores Peter Sturm. (c) Peter Sturm, Universität Trier
CONCURRENCY MODELS Auf der Suche nach dem heiligen Gral der ManyCores Peter Sturm 1 AUTOVERKEHR 61.5 Millionen zugelassene Autos (Anfang 2014) Quelle: Statistisches Bundesamt 2 3 SPERRGRANULAT Die Zeit
MehrÜbersicht. Nebenläufige Programmierung: Praxis und Semantik. Nebenläufige Programmierung in Haskell (2) Software Transactional Memory in Haskell
Stand der Folien: 24. Januar 2012 Übersicht Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Nebenläufige Programmierung in Haskell (2) 1 Software Transactional
MehrWoche 6. Cedric Tompkin. April 11, Cedric Tompkin Woche 6 April 11, / 29
Woche 6 Cedric Tompkin April 11, 2018 Cedric Tompkin Woche 6 April 11, 2018 1 / 29 Figure: Mehr Comics Cedric Tompkin Woche 6 April 11, 2018 2 / 29 Learning Objectives Dir kennst Return-by-value und Return-by-reference.
MehrTutorium Softwaretechnik I
Tutorium Softwaretechnik I Moritz Klammler 11. Juli 2017 Fakultät für Informatik, IPD Tichy Titelfoto: Copyright (C) 2010 Multimotyl CC BY-SA 3.0 1 11. Juli 2017 Moritz Klammler - Tutorium Softwaretechnik
MehrObjektorientierte Programmierung mit C++ den sog. default constructor X (){}
Wann immer Objekte entstehen, läuft automatisch ein (passender) Konstruktor! Wann immer Objekte verschwinden, läuft automatisch der Destruktor! Klassen ohne nutzerdefinierten Konstruktor/Destruktor besitzen
MehrÜbersicht. Nebenläufige Programmierung: Praxis und Semantik. Nebenläufige Programmierung in Haskell (2) Design
Übersicht Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Nebenläufige Programmierung in Haskell (2) PD Dr. David Sabel 1 Software Transactional Memory Übersicht
MehrProgrammiersprachen Einführung in C
Programmiersprachen Einführung in C Teil 2: Prof. Dr. Unser erstes C-Programm int main (int argc, char *argv[]) int i; int sum = 0; for (i = 0; i
MehrPK-Einstufungstest. 1. Allgemeine Multiple-Choice-Aufgaben. Aufgabe 1.1. Alle Aufgaben beziehen sich auf Java.
PK-Einstufungstest 59 / 100 Punkte Alle Aufgaben beziehen sich auf Java. 1. Allgemeine Multiple-Choice-Aufgaben 14 / 15 Punkte Bitte wählen Sie ALLE zutreffenden Antwortmöglichkeiten aus. Es können beliebig
MehrÜbung HP Angabe: #include <iostream> #include <vector> #include <locale>
Aufgabe 1: Schreiben Sie ein C++ Programm, das die eigene Klasse Words definiert. Die Idee ist, dass diese Klasse in einem wstring Vector alle Wörter eines Textes speichert. In Ihrem private Bereich soll
Mehr5.3 Doppelt verkettete Listen
5.3 Doppelt verkettete Listen Einfach verkettete Listen unterstützen das Einfügen und Löschen am Anfang in konstanter Zeit; für das Einfügen und Löschen am Ende benötigen sie jedoch lineare Laufzeit Doppelt
MehrDie Syntax von Java. Ursprünge. Konsequenzen. Das Wichtigste in Kürze. Weiteres Vorgehen. Rund um Java. Sun Microsystems. Borland Software Corp
Ursprünge Die Syntax von Java Borland Software Corp 1995 Syntax: Pascal Objektorientierte Prorammierung optional Plattformen: Windows (Linux, Mac OS X) Sun Microsystems 1995 Syntax: C/C++ Objektorientiert
Mehr6 Speicherorganisation
Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für
MehrPK-Einstufungstest. 1. Allgemeine Multiple-Choice-Aufgaben
PK-Einstufungstest 34 / 100 Punkte Alle Aufgaben beziehen sich auf Java. 1. Allgemeine Multiple-Choice-Aufgaben 4 / 15 Punkte Bitte wählen Sie ALLE zutreffenden Antwortmöglichkeiten aus. Es können beliebig
MehrAVO-Übung 1. Übungsszenario, Entwicklungswerkzeuge. Andreas I. Schmied
AVO-Übung 1 Übungsszenario, Entwicklungswerkzeuge Andreas I. Schmied (andreas.schmied@uni-ulm.de) AspectIX-Team Abteilung Verteilte Systeme Universität Ulm WS2005 Allgemeines Übungsbetrieb Kalender-Szenario
Mehr3.2 Prozessumschaltung
3.2 Prozessumschaltung (dispatching) deaktiviert einen Prozess und aktiviert einen anderen. Wann? aktiver Prozess wird vom Prozessor verdrängt zugunsten eines bereiten Prozesses aktiver Prozess blockiert,
MehrAufgabenblatt 6 Musterlösung
Prof. Dr. rer. nat. Roland Wismüller Aufgabenblatt 6 Musterlösung Vorlesung Betriebssysteme I Wintersemester 2018/19 Aufgabe 1: Implementierung von Threads (Bearbeitung zu Hause) Der größte Vorteil ist
MehrExercise 6. Compound Types and Control Flow. Informatik I für D-MAVT. M. Gross, ETH Zürich, 2017
Exercise 6 Compound Types and Control Flow Daniel Bogado Duffner Slides auf: Informatik I für D-MAVT bodaniel@student.ethz.ch n.ethz.ch/~bodaniel Agenda Recap/Quiz Structures Unions Enumerations Loops
MehrAlgorithmen und Datenstrukturen Musterlösung 5
Algorithmen und Datenstrukturen Musterlösung 5 Martin Avanzini Thomas Bauereiß Herbert Jordan René Thiemann
MehrVerkettete Listen. DVG Verkettete Listen 1
Verkettete Listen DVG2-03 - Verkettete Listen 1 Primitive typen Vorteile: werden direkt vom Prozessor unterstützt schneller Zugriff schnelle Verarbeitung Nachteile: kleine menge feste Struktur unflexibel
MehrLehrstuhl für Datenverarbeitung. Technische Universität München. Leistungskurs C++ Multithreading
Leistungskurs C++ Multithreading Threading mit Qt Plattformübergreifende Thread-Klasse Sehr einfach zu benutzen Leider etwas schlecht dokumentiert Leistungskurs C++ 2 QThread Plattformübergreifende Thread-Klasse
MehrMicrosoft.NET Framework & Component Object Model. ein Vortrag von Florian Steuber
Microsoft.NET Framework & Component Object Model ein Vortrag von Florian Steuber Übersicht I..NET Framework 1. Was ist das.net Framework? 2. Das.NET Execution Model 3. Sprachunabhängigkeit, CTS und CLS
MehrNebenläufigkeit und Kommunikation in Go
Anwendung: Vorlesung Modellierung nebenläufiger Systeme Sommersemester 2016 Universität Duisburg-Essen Harsh Beohar & Barbara König Go ist eine Programmiersprache, die von Google entwickelt wird (http://golang.org/)
MehrWiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute
Wiederholung: Zusammenfassung Felder Algorithmen und Datenstrukturen (für ET/IT) Wintersemester / Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Ein Feld A kann repräsentiert
Mehr