Multi-Threading wie in C++11

Größe: px
Ab Seite anzeigen:

Download "Multi-Threading wie in C++11"

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 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

Mehr

Memory Models Frederik Zipp

Memory 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

Mehr

Das C++- Speichermodell. Rainer Grimm Schulungen, Coaching und Technologieberatung

Das 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

Mehr

Operating Systems Principles C11

Operating 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

Mehr

Best Practices. Rainer Grimm Training, Coaching und Technologieberatung

Best 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

Mehr

Best Practices. Rainer Grimm Training, Coaching und Technologieberatung

Best 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

Mehr

Datenstrukturen und Algorithmen

Datenstrukturen 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

Mehr

Java Concurrency Utilities

Java 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(),

Mehr

Read-Copy-Update (RCU)

Read-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

Mehr

Repetitorium Programmieren I + II

Repetitorium 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

Mehr

Städtisches Gymnasium Olpe Java Ht Informatik - Q1 Die Klasse List im Abitur Methoden und Beispielcode Hier alle wichtigen Methoden. Ein Beispielcode

Stä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

Mehr

Linked Lists The Role of Locking

Linked 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

Mehr

Async und Await Asynchrone Programmierung in C# 5

Async 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

Mehr

Verteilte Systeme Teil 2

Verteilte 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

Mehr

Prozesse und Threads. wissen leben WWU Münster

Prozesse 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

Mehr

Nebenläufige Programme mit Python

Nebenlä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

Mehr

16. Dynamische Datenstrukturen

16. 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

Mehr

Angewandte Mathematik und Programmierung

Angewandte 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

Mehr

Neues vom STRIP Forth-Prozessor

Neues 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 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

Mehr

Programmier-Befehle - Woche 10

Programmier-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

Mehr

13. Dynamische Datenstrukturen

13. 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

Mehr

Cilk Sprache für Parallelprogrammierung. IPD Snelting, Lehrstuhl für Programmierparadigmen

Cilk 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

Mehr

Informatik I: Einführung in die Programmierung

Informatik 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

Mehr

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Heap 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 Ü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

Mehr

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Heap 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

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

Introduction 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

Mehr

Prozesszustände (1a)

Prozesszustä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 &

Mehr

JavaLand,

JavaLand, 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

Mehr

Praxis der Programmierung

Praxis 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

Mehr

Nicht-blockierende Synchronisation für Echtzeitsysteme

Nicht-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

Mehr

Multithreading, richtig gemacht? Rainer Grimm

Multithreading, 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

Mehr

Ich liebe Java && Ich liebe C# Rolf Borst

Ich 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

Mehr

6 Speicherorganisation

6 Speicherorganisation 6 Speicherorganisation Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen

Mehr

Kontrollfragen Mikrocontroller Programmiersprache C H1203 Felix Rohrer

Kontrollfragen 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 Ü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

Mehr

Repetitorium Programmieren I + II

Repetitorium 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

Mehr

28. Parallel Programming II

28. 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++

Mehr

Ausnahmebehandlung in Java

Ausnahmebehandlung 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

Mehr

Programmieren in Java

Programmieren 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[]

Mehr

Einführung in C. EDV1-04C-Einführung 1

Einfü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

Mehr

Grundlagen der Informatik 12. Strukturen

Grundlagen 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.

- 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?

Mehr

Informatik 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 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.

Mehr

Beispielvortrag: HPCG auf Intel Haswell-EP

Beispielvortrag: 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

Mehr

Anwendung (2. Versuch:-) Entkopplung der Locks

Anwendung (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()

Mehr

Betriebssysteme. Vorlesung im Herbstsemester 2010 Universität Mannheim. Kapitel 6: Speicherbasierte Prozessinteraktion

Betriebssysteme. 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 Ü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

Mehr

Asynchrone Programmierung mit Async und Await in C# 5 unter der Lupe

Asynchrone 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

Mehr

Programmieren in C. Rekursive Strukturen. Prof. Dr. Nikolaus Wulff

Programmieren 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

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine

Mehr

Lösungshinweise/-vorschläge zum Übungsblatt 13: Software-Entwicklung 1 (WS 2017/18)

Lö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)

Mehr

Programmieren I. Kapitel 13. Listen

Programmieren 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 Ü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

Mehr

Schnittstellen, Stack und Queue

Schnittstellen, 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

Mehr

Lock-free Datenstrukturen

Lock-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.

Mehr

Datenkapselung: public / private

Datenkapselung: public / private 627 18. Klassen Klassen, Memberfunktionen, Konstruktoren, Stapel, verkettete Liste, dynamischer Speicher, Copy-Konstruktor, Zuweisungsoperator, Destruktor, Konzept Dynamischer Datentyp Datenkapselung:

Mehr

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2018

Introduction 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

Mehr

Programmier-Befehle - Woche 08

Programmier-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:

Mehr

Threads. Netzwerk - Programmierung. Alexander Sczyrba Jan Krüger

Threads. 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

Mehr

Kurze Einführung in die Programmiersprache C++ und in Root

Kurze 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

Mehr

1 of :17:14

1 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

Mehr

Objektorientierte Programmierung

Objektorientierte 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

Mehr

Beispiel für überladene Methode

Beispiel 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

Mehr

Dynamische Datentypen

Dynamische 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

Mehr

Einführung in die Informatik

Einfü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

Mehr

Universität Karlsruhe (TH)

Universitä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 Ü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)

Mehr

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Einfü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

Mehr

Abstrakte C-Maschine und Stack

Abstrakte 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

Mehr

1. Die rekursive Datenstruktur Liste

1. 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

Mehr

Datenstrukturen und Algorithmen

Datenstrukturen 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

Mehr

Informatik - Übungsstunde

Informatik - Ü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

Mehr

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

C++ 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

Mehr

Nachname: Vorname: Matr.-Nr.: Punkte: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende Struktogramm zur Berechnung von sin(x) mit Hilfe einer Reihe.

Nachname: 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

Mehr

Nebenläufige und verteilte Programme CS2301

Nebenlä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

Mehr

CONCURRENCY 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. (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

Ü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

Mehr

Woche 6. Cedric Tompkin. April 11, Cedric Tompkin Woche 6 April 11, / 29

Woche 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.

Mehr

Tutorium Softwaretechnik I

Tutorium 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

Mehr

Objektorientierte Programmierung mit C++ den sog. default constructor X (){}

Objektorientierte 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. 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

Mehr

Programmiersprachen Einführung in C

Programmiersprachen 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

Mehr

PK-Einstufungstest. 1. Allgemeine Multiple-Choice-Aufgaben. Aufgabe 1.1. Alle Aufgaben beziehen sich auf Java.

PK-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>

Ü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

Mehr

5.3 Doppelt verkettete Listen

5.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

Mehr

Die Syntax von Java. Ursprünge. Konsequenzen. Das Wichtigste in Kürze. Weiteres Vorgehen. Rund um Java. Sun Microsystems. Borland Software Corp

Die 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

Mehr

6 Speicherorganisation

6 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

Mehr

PK-Einstufungstest. 1. Allgemeine Multiple-Choice-Aufgaben

PK-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

Mehr

AVO-Übung 1. Übungsszenario, Entwicklungswerkzeuge. Andreas I. Schmied

AVO-Ü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

Mehr

3.2 Prozessumschaltung

3.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,

Mehr

Aufgabenblatt 6 Musterlösung

Aufgabenblatt 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

Mehr

Exercise 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. 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

Mehr

Algorithmen und Datenstrukturen Musterlösung 5

Algorithmen und Datenstrukturen Musterlösung 5 Algorithmen und Datenstrukturen Musterlösung 5 Martin Avanzini Thomas Bauereiß Herbert Jordan René Thiemann

Mehr

Verkettete Listen. DVG Verkettete Listen 1

Verkettete 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

Mehr

Lehrstuhl für Datenverarbeitung. Technische Universität München. Leistungskurs C++ Multithreading

Lehrstuhl 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

Mehr

Microsoft.NET Framework & Component Object Model. ein Vortrag von Florian Steuber

Microsoft.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

Mehr

Nebenläufigkeit und Kommunikation in Go

Nebenlä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/)

Mehr

Wiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute

Wiederholung: 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