Multithreading. Paralleles Hello World. int main() { auto hello = [](auto tnum) { cout << "Thread " << tnum << " sagt Hello World\n"; };

Größe: px
Ab Seite anzeigen:

Download "Multithreading. Paralleles Hello World. int main() { auto hello = [](auto tnum) { cout << "Thread " << tnum << " sagt Hello World\n"; };"

Transkript

1 Multithreading Unter einem Thread versteht man eine Hardware-Ausführungseinheit, die ein Programmabarbeitet. Multithreading bedeutet demnach die parallele Ausführung von Programmteilen. Bisher haben wir (das ist die Standardeinstellung) jedes Programm nur durch einen Hauptthread ausführen lassen, der von C++ automatisch erzeugt wird. Dadurch beschäftigt sich jedoch nur ein Bruchteil der CPU, die 2-64 und mehr Hardware-Threads besitzt, mit dem Programm, der Rest führt andere Programme aus oder schläft. Wenn man das eigene Programm so aufteilen kann, dass mehrere Hardware-Threads zugleich daran arbeiten, könnte man theoretisch die Ausführungsgeschwindigkeit vervielfachen. Dazu ist es notwendig, den Code, der parallel verarbeitet werden soll, in eine Funktion (oder ein Lambda) zu packen, da die C++ Threadsbibliothek nur die Abarbeitung von kompletten Funktionen/Methoden/Lambdas unterstützt. Die Thread-Bibliothek ist derzeit noch etwas klein, vor allem ist man sich in der C++-Gemeinde noch nicht sicher, welcher Ansatz die besten Ergebnisse erzielen wird, sodass es derzeit mehrere konkurrierende Parallelisierungsverfahren gibt. Paralleles Hello World Betrachten wir einmal das Hello-World.cpp Programm mit einer Worker-Funktion (Lambda): hello(unsigned tnum) // kann von mehreren Threads aufgerufen werden hello(0); Das ist noch kein Multithreading, da das Lambda hello() nur vom einzigen Hauptthread ausgeführt wird. Nach dem Inkludieren von <thread> kann man das relativ leicht ändern. Mit dem Konstruktor aus der Threadbibliothek template<typename Function> std::thread(function&& f, ) erzeugt man einen neuen Thread, der f( ) ausführt und dann stoppt. Im Hauptprogramm steht dann:

2 thread thello, 1; t.join(); // erzeuge Thread t, der hello(1)abarbeitet // warte, bis t fertig ist Kompilieren muss man das mit der zusätzlichen Option pthread! Die Ausgabe ändert sich kaum (Thread 1... statt Thread 0...), aber der Ablauf ist ein ganz anderer: Der Hauptthread kreiert hier einen neuen Thread t, der sofort startet und die Funktion hello (das 1. Argument) mit den weiteren Argumenten aufruft (hier 1). Mit dem Verlassen der Funktion (des Lambdas) endet dieser Thread. Der Hauptthread wartet inzwischen in t.join() auf das Ende von t und macht dann alleine weiter. Das ist schon echtes Multithreading, obwohl man als Anwender nichts davon sieht. Der Hauptthread könnte natürlich nach der Erzeugung von t selbst auch etwas arbeiten und nicht nur auf das Ende von t warten: thread thello, 1; hello(0); t.join(); // schicke t an die Arbeit // arbeite selbst etwas // warte dann, bis t fertig ist Jetzt sieht man schon 2 Ausgaben. Das lässt sich schon noch steigern: Wir kreieren 20 neue Threads, die alle hello() aufrufen. Da man für alle Threads die join()-methode aufrufen muss (es gibt auch Alternativen, aber diese sind umständlicher), muss man alle Threads speichern. Das erledigt man am besten mit einem Container wie std::vector oder std::list und einer Schleife. Den Join macht man dann mit einem Range-based for.

3 std::vector<std::thread> meine_helferlein; for (unsigned i = 1; i <= 20; ++i) // 20 Threads z.b. meine_helferlein.push_back(threadhello, i); hello(0); // arbeite selbst etwas for (auto& t: meine_helferlein) // & ist wichtig!!!! t.join(); // warte auf das Ende aller Arbeiter Wer in Vorlesung 10 die Beispiele über das optimierte push_back() verstanden hat, würde obiges wesentlich effizienter programmieren: std::vector<std::thread> meine_helferlein; meine_helferlein.reserve(20); // reserviere den Platz vor for (unsigned i = 1; i <= 20; ++i) // emplace statt push meine_helferlein.emplace_back(hello, i); Hier sollte man schon das Hauptproblem des Multithreadings erkennen. Die Ausgabe könnte manchmal durcheinander sein, da die Threads um die Ausgabe auf den Bildschirm kämpfen und sich gegenseitig in die Quere kommen. Den Zugang zu einer gemeinsamen Ressource muss man manchmal exklusiv für sich reservieren, sonst könnten andere Threads dazwischenfunken. Hier gibt es keine optimale Universallösung, jede Situation erfordert unterschiedliche Techniken. Die 2 wichtigsten davon sind atomare Operationen und Locking-Mechanismen. Eine atomare Operation ist eine solche, die nicht von anderen Threads unterbrochen werden kann: z.b. ist der Aufruf einer Streamausgabe << atomar. Der Ausgabesalat entsteht nur, weil jeder Thread mehrere solcher Operationen machen will: cout << "Thread " << tnum << " sagt Hello World\n"; Das sind drei atomare Aufrufe (C-Stringliteral, Zahl, C-Stringliteral), aber zwischen diesen könnten andere Threads etwas ausgeben und so einen Ausgabesalat erzeugen. Die einfachste und schnellste Lösung in diesem Fall: Die Threads schreiben vorerst alles in einen privaten C++-String und geben diesen am Ende mit einer einzigen atomaren Streamausgabe auf std::cout aus. Das Schreiben in einen String erledigen wir mit einem std::ostringstream-objekt. auto hello = [](auto tnum) ostringstream oss;

4 ; oss << "Thread " << tnum << " sagt Hello World\n"; cout << oss.str(); // alles atomar ausgeben Die Locking-Technik erfordert den Einsatz eines Schlosses (std::mutex aus Includedatei <mutex>), das für alle Threads zugänglich sein muss (also wahrscheinlich global oder static ist bzw. vom Lambda per Referenz (!) aufgezeichnet werden muss). Vor jeder Ausgabe versucht der Thread, das Schloss zu schließen. Ist es bereits geschlossen (ein anderer Thread war schneller), so wird er automatisch angehalten, bis das Schloss frei wird und er es sodann selbst schließen kann. Bis zum Aufsperren nach getaner Arbeit sind nun die anderen Threads ausgesperrt. Damit man auf keinen Fall vergessen kann, das Schloss nach getaner Arbeit zu öffnen (und damit alle anderen Threads zu blockieren), überlässt man diese heikle Arbeit einem Spezialagenten wie std::scoped_lock< > ab C++17 (vor C++17 verwendet man std::lock_guard<std::mutex>), dem man im Konstruktor das Schloss zum Sperren übergibt und dessen Destruktor das Schloss am Ende automagisch freigibt. std::mutex lock_cout; // Ein globales Schloss für cout auto hello = [&lock_cout](auto tnum) scoped_lock sllock_cout; // C++17! sl sperrt ab cout << "Thread " << tnum << " sagt Hello World\n"; ; // sl sperrt automagisch auf Paralleles count up and down Im folgenden Beispiel addieren und subtrahieren die Threads von einem gemeinsamen int shared_int dieselbe Zahl, sodass dessen Anfangswert eigentlich erhalten bleiben sollte. Wie man sieht, ändert sich dieser ständig und unvorhersehbar: int shared_int = 0; void count_up_and_down(unsigned tnum) for (unsigned i = 0; i < 1'000'000; ++i) shared_int += tnum; // count up shared_int -= tnum; // count down

5 Der Grund ist wiederum, dass sich die Threads beim Zugriff auf den Integer in die Quere kommen (die Operation += und -= sind nicht atomar, obwohl es optisch so aussieht). Die Lösung mit dem Schloss funktioniert auch hier: int shared_int = 0; std::mutex lock_int; void count_up_and_down (unsigned tnum) for (unsigned i = 0; i < 1'000'000; ++i) std::scoped_lock sllock_int; // zusperren shared_int += tnum; // count up shared_int -= tnum; // automagisch aufsperren // count down Das Programm läuft jetzt korrekt aber recht langsam. In diesem Fall würde es sich eher anbieten, die Zugriffe auf den gemeinsamen Integer atomar zu machen. Dazu gibt es (nach #include <atomic>) neue Typen, auf die nur atomar zugegriffen werden kann: std::atomic<int> shared_int; // atomarer int-typ, = 0 geht NICHT void count(unsigned tnum) for (unsigned i = 0; i < 1'000'000; ++i) shared_int += tnum; // count up += ist hier atomar shared_int -= tnum; // count down Dieses Programm funktioniert ebenfalls korrekt und ist deutlich schneller. Ob die atomaren Datentypen schneller als der Einsatz eines std::mutex sind, hängt u.a. auch von der CPU ab. Besitzt diese eine Unterstützung für atomare Operationen, wird man dadurch einen Zeitvorteil haben. Kann die CPU keine atomaren Operationen, so muss die <atomic> Bibliothek intern diese mit einem mutex realisieren und der Zeitvorteil ist dahin. Es lohnt sich aber, es trotzdem zu versuchen. Welche Parallelisierungs-Möglichkeiten hat C++ 1) Die Variante mit std::thread ist nur eine Möglichkeit, die C++ derzeit bietet. Mit C++20 werden voraussichtlich noch einige weitere Varianten dazukommen. Die

6 Verwendung von std::thread ist definitiv die einfachste Methode, allerdings hat sie folgende Nachteile: Es ist kein Rückgabewert möglich, d.h. die auszuführende Funktion (meist ein Lambda) muss als Rückgabetyp void haben (ist bei Lambda ohnehin default). In keinem Thread darf es eine Exception geben, sonst wird das Programm unweigerlich beendet (kein try-catch() möglich). Threads MÜSSEN ge-join-ed werden (oder mit der Methode.detach() abgekoppelt werden), sonst endet das Programm mit Fehler! Für jeden Aufruf wird ein neuer Thread erzeugt, der nach getaner Arbeit wieder zerstört wird. Eine Wiederverwendung von Threads (z.b. durch Threadpools) ist nicht möglich. 2) die Parallelisierung durch std::async( ), welche die ersten 3 Nachteile von oben definitiv nicht besitzt und die auch (das hängt vom Compiler ab) mittels Threadpools realisiert werden kann. std::async( ) gibt ein std::future- Objekt zurück und benötigt daher (wie überraschend) das Inkludieren von <future>. In diesem Objekt wird der Thread in der Zukunft (, deshalb der Name) den Rückgabewert (oder eine allfällige Exception) speichern. Es gibt natürlich Methoden, dieses Objekt vom Kontrollprogramm abzufragen und so festzustellen, ob der Thread schon fertig ist ( valid() ), den Rückgabewert auszulesen ( get() ) und dabei auch allfällige Exceptions aufzufangen: mittels try catch( ). 3) Mit C++20 wird es z.b. paralleles std::for_each() und viele weitere STL- Algorithmen mit eingebauter Parallelisierung geben. Achtung: Beide Varianten (std::thread und std::async) können nur die Wertübergabe (also keinerlei Referenzen!) für die auszuführende Funktion (oder das Lambda). Will man unbedingt Referenzen an diese Funktionen übergeben, muss man diese in sogenannte Wrapper-Objekte stecken: std::ref(x) übergibt eine Referenz auf x per Wert std::cref(x) übergibt eine konstante Referenz auf x per Wert Wann lohnt sich Multithreading Das ist vielleicht die schwierigste Frage von allen. Sicher nur, wenn Hardware für mehrere unabhängige Threads vorhanden ist. Da die meisten modernen CPUs 2, 4 oder noch mehr Kerne haben, ist das heutzutage fast immer der Fall. Die Erzeugung und Verwaltung von Threads kostet Zeit. Daher müssen die Threads schon reichlich Arbeit erledigen, dass es sich auf der Uhr auszahlt. Muss man auch noch die

7 Threads synchronisieren, (d.h. einer darf erst arbeiten wenn ein anderer einen Checkpoint erreicht hat) wird es nochmals schwieriger. Am besten für Multithreading eignen sich Situationen, in denen die Threads unabhängig voneinander und ohne Streitigkeiten um Ressourcen ablaufen können. Viele Netzwerk- Serverdienste sind nach diesem Muster aufgebaut (pro Client ein Thread). Hier ist Multithreading fast schon Pflicht. Ebenso einfach geht die Parallelisierung in der Video- Kodierung: Jeder Thread übernimmt ein Paar Videoframes. Die Simulationstechnik ist auch eine ideale Anwendung für Multithreading. High Performance Computing verwendet Tausende von Threads auf vernetzten Systemen (vielleicht sogar Dutzende von Threads laut Obelix), um gewaltige Gleichungssysteme zu lösen (oder um unsere verschlüsselte Kommunikation zu knacken).

Funktionen: Rückgabewert

Funktionen: Rückgabewert Funktionen: Rückgabewert Jede Funktion in C++ (außer Konstruktoren und Destruktoren siehe später) MUSS einen Rückgabewert-Typ vereinbaren. Gibt sie nichts zurück, muss der Rückgabetyp void sein. Jede return-anweisung

Mehr

C Seminar. Dr.sc.nat. Michael J.M. Wagner, New Elements. Revision 89

C Seminar. Dr.sc.nat. Michael J.M. Wagner, New Elements. Revision 89 C++11 - Seminar Dr.sc.nat. Michael J.M. Wagner, New Elements Revision 89 Inhaltsverzeichnis 1 Tour de C++ 11 1 1.1 Standards und Ziele................................ 1 1.2 Kernsprache....................................

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

C++ für alle. Praktische Neuerungen in C September 2012

C++ für alle. Praktische Neuerungen in C September 2012 Praktische Neuerungen in C++11 18. September 2012 Änderungen kriegen Klassen. Eine Änderung mit X ist Y : S syntaktisch T im Typsystem L in der Library S for-schleifen Alt und bekannt aus C++98/03: std

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

Erste Java-Programme (Scopes und Rekursion)

Erste Java-Programme (Scopes und Rekursion) Lehrstuhl Bioinformatik Konstantin Pelz Erste Java-Programme (Scopes und Rekursion) Tutorium Bioinformatik (WS 18/19) Konstantin: Konstantin.pelz@campus.lmu.de Homepage: https://bioinformatik-muenchen.com/studium/propaedeutikumprogrammierung-in-der-bioinformatik/

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 15 Parallele Programmierung... 15-2 15.1 Die Klasse java.lang.thread... 15-2 15.2 Beispiel 0-1-Printer als Thread... 15-3 15.3 Das Interface java.lang.runnable... 15-4 15.4 Beispiel 0-1-Printer

Mehr

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder

Mehr

Objektorientierte Programmierung II

Objektorientierte Programmierung II Objektorientierte Programmierung II OOP I Erlaubt Entwicklers, im Problemraum zu denken und zu arbeiten. Das Problem wird in eine Menge von Objekten zerlegt. Objekte wirken aufeinander, um das Problem

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

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

DAP2-Programmierpraktikum Einführung in C++ (Teil 2) DAP2-Programmierpraktikum Einführung in C++ (Teil 2) Carsten Gutwenger 18. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Dynamischer Speicher Klassen und

Mehr

Hilfsblatt für C++ Prüfungen im 5. Semester

Hilfsblatt für C++ Prüfungen im 5. Semester Hilfsblatt für C++ Prüfungen im 5. Semester Hilfsblatt für C++ Prüfungen im 5. Semester 1 Klassen 2 Win-32 Programmierung 3 Handles 3 Dateien, Files 3 Threads 3 Events 4 Funktionen 5 Einfache Funktionen

Mehr

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download Organisatorisches Folien (u.a.) gibt's auf der Lva-Homepage zum Download Diesen Mi erstes Tutorium (15-17) Ab nächster Woche montags 10-12 (jeweils im Computerraum) 17.10.2017 IT I - VO 3 1 Organisatorisches

Mehr

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11 C++ Teil 12 Sven Groß 18. Jan 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 12 18. Jan 2016 1 / 11 Themen der letzten Vorlesung Wiederholung aller bisherigen Themen: Datentypen und Variablen Operatoren Kontrollstrukturen

Mehr

ÜBUNGS-BLOCK 7 LÖSUNGEN

ÜBUNGS-BLOCK 7 LÖSUNGEN ÜBUNGS-BLOCK 7 LÖSUNGEN Aufgabe 1: Gegeben ist folgender Code: Auto[] array = new Auto[3]; // Alle Autos im Array tunen: for (int i = 1; i

Mehr

Multi-Threading. Ralf Abramowitsch Vector Informatik GmbH abramowitsch@lehre.dhbw-stuttgart.de

Multi-Threading. Ralf Abramowitsch Vector Informatik GmbH abramowitsch@lehre.dhbw-stuttgart.de Multi-Threading Ralf Abramowitsch Vector Informatik GmbH abramowitsch@lehre.dhbw-stuttgart.de Einführung in Threads Threads synchronisieren ThreadPools Thread = unabhängiger Ausführungspfad, der gleichzeitig

Mehr

4 Generische Programmierung. 4.1 Klassen-Templates (*) 4.2 Funktions-Templates (*) 4.3 Besondere Programmiertechniken (Smart Pointer)

4 Generische Programmierung. 4.1 Klassen-Templates (*) 4.2 Funktions-Templates (*) 4.3 Besondere Programmiertechniken (Smart Pointer) 4 Generische Programmierung 4.1 Klassen-Templates (*) 4.2 Funktions-Templates (*) 4.3 Besondere Programmiertechniken (Smart Pointer) (*) Auch in dieser Datei. V 4.05; Hon. Prof. Helmke 1 Intelligente Zeiger

Mehr

Vorlesungsprüfung Programmiersprache 1

Vorlesungsprüfung Programmiersprache 1 Vorlesungsprüfung Programmiersprache 1 Termin der Prüfung: 1) Di 20.03.2018 16:15 17:00 HSB 3 2) Di 15.05.2018 16:15 17:00 HSB 3 3) Di 12.06.2018 16:15 17:00 HSB 3 Stoffgebiete: 1) Ganzzahltypen: char,

Mehr

Lambda-Funktionen. Lambda-Funktionen. Lambda-Funktionen sollen

Lambda-Funktionen. Lambda-Funktionen. Lambda-Funktionen sollen Lambda-Funktionen Lambda-Funktionen sind Funktionen ohne Namen. definieren ihre Funktionalität an Ort und Stelle. können wie Daten kopiert werden. können ihren Aufrufkontext speichern. Lambda-Funktionen

Mehr

Implementieren von Klassen

Implementieren von Klassen Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und

Mehr

Aufwand für Threads 124

Aufwand für Threads 124 Aufwand für Threads 124 #include #include #include #include thread-overhead.cpp int main() { unsigned int counter = 0; unsigned int nof_threads = 1

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

Pthreads. David Klaftenegger. Seminar: Multicore Programmierung Sommersemester

Pthreads. David Klaftenegger. Seminar: Multicore Programmierung Sommersemester Seminar: Multicore Programmierung Sommersemester 2009 16.07.2009 Inhaltsverzeichnis 1 Speichermodell 2 3 Implementierungsvielfalt Prioritätsinversion 4 Threads Speichermodell Was sind Threads innerhalb

Mehr

Sequentielle Programm- / Funktionsausführung innerhalb eines Prozesses ( thread = Ausführungsfaden )

Sequentielle Programm- / Funktionsausführung innerhalb eines Prozesses ( thread = Ausführungsfaden ) Threads Sequentielle Programm- / Funktionsausführung innerhalb eines Prozesses ( thread = Ausführungsfaden ) Ein thread bearbeitet eine sequentielle Teilaufgabe innerhalb eines Prozesses Mehrere nebenläufige

Mehr

Einführung Verteilte Systeme - Java Threads I -

Einführung Verteilte Systeme - Java Threads I - Einführung Verteilte Systeme - Java Threads I - Prof. Dr. Michael Cebulla 20. November 2014 Fachhochschule Schmalkalden Wintersemester 2014/15 1 / 38 M. Cebulla Verteilte Systeme Gliederung Wiederholung:

Mehr

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online Organisatorisches Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online Nächste Woche VO und UE am Dienstag, den 30.10.! UE im CR IL/IT Wissensüberprüfung am Zettel 25.10.2018 IT I - VO 3 1 Organisatorisches

Mehr

C-Pointer (Zeiger, Adressen) vs. C++ Referenzen

C-Pointer (Zeiger, Adressen) vs. C++ Referenzen C-Pointer (Zeiger, Adressen) vs. C++ Referenzen Der Pointer (C/C++): In C/C++ ist der Pointer ein eigener Datentyp, der auf Variablen/Objekte zeigen kann. Indem man den Pointer dereferenziert, gewinnt

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

C-Arrays vs. C++-Container

C-Arrays vs. C++-Container C-Arrays vs. C++-Container In C verwendet man (mangels Alternativen) sehr häufig das C-Array (= Feld): im Speicher hintereinander abgelegte Elemente vom gleichen Typ. Arrays haben einen Basistyp (Typ des

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:

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 Zeitplan 16.10. Vorlesung 23.10. Vorlesung, Gruppeneinteilung 30.10. Vorlesung, HA1 06.11. Vorlesung, HA2 13.11. Vorlesung entfällt wegen SVV 20.11. Präsentation Vorprojekt

Mehr

Praktische Informatik 1

Praktische Informatik 1 Praktische Informatik 1 Imperative Programmierung und Objektorientierung Karsten Hölscher und Jan Peleska Wintersemester 2011/2012 Session 2 Programmierung Begriffe C/C++ Compiler: übersetzt Quellcode

Mehr

Javakurs für Fortgeschrittene

Javakurs für Fortgeschrittene Javakurs für Fortgeschrittene Einheit 07: Nebenläufigkeit Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Einführung in die Nebenläufigkeit und Java Thread Konzept: Motivation

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

Beuth Hochschule Parameter-Übergabe-Mechanismen WS17/18, S. 1

Beuth Hochschule Parameter-Übergabe-Mechanismen WS17/18, S. 1 Beuth Hochschule Parameter-Übergabe-Mechanismen WS17/18, S. 1 Parameter-Übergabe-Mechanismen in Java und in anderen Sprachen. 1. Methoden vereinbaren mit Parametern Wenn man (z.b. in Java) eine Methode

Mehr

Applications will increasingly need to be concurrent if they want to fully exploit continuing exponential CPU throughput gains.

Applications will increasingly need to be concurrent if they want to fully exploit continuing exponential CPU throughput gains. Teil 3: Threads Herb Sutter ( The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software, Herb Sutter, Dr. Dobb s Journal, 30(3), March 2005.): Applications will increasingly need to be

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

Versuchsziele Konzepte der parallelen Programmierung am Beispiel von Threads anwenden können. Einbau von Kontrollmechanismen mittels Semaphore.

Versuchsziele Konzepte der parallelen Programmierung am Beispiel von Threads anwenden können. Einbau von Kontrollmechanismen mittels Semaphore. Hochschule Harz Versuch: fcopy Mit Java FB Automatisierung und Informatik Betriebssysteme Thema: Kopieren einer Datei unter der Kontrolle von Semaphoren Versuchsziele Konzepte der parallelen Programmierung

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:

Mehr

Threading. Arthur Zaczek. Aug 2015

Threading. Arthur Zaczek. Aug 2015 Arthur Zaczek Aug 2015 1 Threading 1.1 Motivation Threading erlaubt die gleichzeitige Ausführung von mehreren Programmteilen. mehrere gleichzeitige Anfragen: Webserver, Datenbank (zu) lange laufende Berechnungen:

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

10.4 Konstante Objekte

10.4 Konstante Objekte 10.4 Konstante Objekte Genau wie bei einfachen Datentypen (int,double,...) kann man auch Objekte als const deklarieren. Eine solche Deklaration bedeutet, daß alle Attribute so behandelt werden, als wären

Mehr

C-Arrays vs. C++-Container

C-Arrays vs. C++-Container C-Arrays vs. C++-Container In C verwendet man (mangels Alternativen) sehr häufig das C-Array (= Feld): im Speicher hintereinander abgelegte Elemente vom gleichen Typ. Arrays haben einen Basistyp (Typ des

Mehr

Gegenseitiger Ausschluss 102

Gegenseitiger Ausschluss 102 Gegenseitiger Ausschluss 102 MX = M (P 1... P n ) M = (lock unlock M) P i = (lock begin_critical_region i end_critical_region i unlock private_work i P i ) n Prozesse P 1... P n wollen konkurrierend auf

Mehr

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services C# - Einführung in die Programmiersprache Methoden Leibniz Universität IT Services 02.07.12 Methoden... sind Subroutinen in einer Klasse. können einen Wert an den Aufrufer zurückgeben. verändern die Eigenschaften

Mehr

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja Aue

Mehr

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen Variablen Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Variablen dienen zur Speicherung von Daten. Um Variablen

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

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

HSR Rapperswil 2001 Markus Rigling. Programmieren: Exceptions Auflage

HSR Rapperswil 2001 Markus Rigling. Programmieren: Exceptions Auflage HSR Rapperswil 2001 Markus Rigling Programmieren: Exceptions 1 1. Auflage Inhaltsverzeichnis: 1. Was sind Exceptions?... 3 2. Struktur des Exception Handling... 3 3. Try-Block... 4 4. Exception Handler

Mehr

Methoden und Wrapperklassen

Methoden und Wrapperklassen Methoden und Wrapperklassen CoMa-Übung IV TU Berlin 06.11.2012 CoMa-Übung IV (TU Berlin) Methoden und Wrapperklassen 06.11.2012 1 / 24 Themen der Übung 1 Methoden 2 Wrapper-Klassen CoMa-Übung IV (TU Berlin)

Mehr

Laborskript Verteilte Systeme

Laborskript Verteilte Systeme Laborskript Verteilte Systeme Nebenläufigkeit in Java Prof. Dr. Oliver Haase 1 Threads Java bietet zwei verschiedene Arten an, Threads zu erzeugen und zu starten: Entweder durch Erweitern der Klasse Thread,

Mehr

Parallele Prozesse Prozeß Parallele Prozesse verzahnte Prozesse Nebenläufige Prozesse: Threads Vorlesung Software-Entwicklung / Folie 131 Ziele:

Parallele Prozesse Prozeß Parallele Prozesse verzahnte Prozesse Nebenläufige Prozesse: Threads Vorlesung Software-Entwicklung / Folie 131 Ziele: Parallele Prozesse SWE-131 Prozeß: Ausführung eines sequentiellen Programmstückes in dem zugeordneten Speicher (Adressraum). Veränderlicher Zustand: Speicherinhalt und Programmposition. Parallele Prozesse:

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

1 Klassen und Objekte

1 Klassen und Objekte 1 Klassen und Objekte Datentyp - Spezifikation des Typs von Datenobjekten Datenstruktur - logische Ordnung von Elementen eines Datentyps - zur (effizienten) Speicherung, Verwaltung, Zugriff - auf die Elemente

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 03: Wiederholung Klassen & Objekte Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Wiederholung Klassen, Objekte, Attribute und Methoden Das Schlüsselwort

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

Nebenläufige Programmierung in Java: Threads

Nebenläufige Programmierung in Java: Threads Nebenläufige Programmierung in Java: Threads Wahlpflicht: Fortgeschrittene Programmierung in Java Jan Henke HAW Hamburg 10. Juni 2011 J. Henke (HAW) Threads 10. Juni 2011 1 / 18 Gliederung 1 Grundlagen

Mehr

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 2. Teil 18. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

Abschnitt 7: Beispiel: Die Klasse String (Teil 1)

Abschnitt 7: Beispiel: Die Klasse String (Teil 1) Abschnitt 7: Beispiel: Die Klasse String (Teil 1) 7. Beispiel: Die Klasse String (Teil 1) 7.1 Einführung 7.2 Die Klasse String und ihre Methoden 7.3 Effizientes dynamisches Arbeiten mit Zeichenketten 7.4

Mehr

Tutorium 2. Strings. Skript zur Vorlesung Einführung in die Programmierung

Tutorium 2. Strings. Skript zur Vorlesung Einführung in die Programmierung LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS DATABASE Tutorium 2 Strings Skript zur Vorlesung Einführung in die Programmierung im Wintersemester 2012/13 Ludwig-Maximilians-Universität

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)

Mehr

16. Ausnahmebehandlung Programmieren / Algorithmen und Datenstrukturen 2

16. Ausnahmebehandlung Programmieren / Algorithmen und Datenstrukturen 2 16. Ausnahmebehandlung Programmieren / Algorithmen und Datenstrukturen 2 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt Wintersemester 2012 / 2013 1 Agenda Kontrollfragen Motivation Fehlerbehandlung

Mehr

Unicode Support Atomic Operations Thread Support Type-Generic Makros Sicherheit Ease-of-Use C11. Thomas Duckardt

Unicode Support Atomic Operations Thread Support Type-Generic Makros Sicherheit Ease-of-Use C11. Thomas Duckardt C11 Thomas Duckardt Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg 22.05.2014 1 / 22 Gliederung (Agenda)

Mehr

parallele Prozesse auf sequenziellen Prozessoren Ein Process ist ein typisches Programm, mit eigenem Addressraum im Speicher.

parallele Prozesse auf sequenziellen Prozessoren Ein Process ist ein typisches Programm, mit eigenem Addressraum im Speicher. Threads parallele Prozesse auf sequenziellen Prozessoren Prozesse und Threads Es gibt zwei unterschiedliche Programme: Ein Process ist ein typisches Programm, mit eigenem Addressraum im Speicher. Ein Thread

Mehr

Folgen und Funktionen in der Mathematik

Folgen und Funktionen in der Mathematik Folgen und Funktionen in der Mathematik Anhand von einigen exemplarischen Beispielen soll die Implementierung von mathematischen Algorithmen in C/C++ gezeigt werden: Reelle Funktionen in C/C++ Diese wird

Mehr

Grundlagen der Objektorientierung :

Grundlagen der Objektorientierung : Grundlagen der Objektorientierung : Objektorientierung ermöglicht (unter anderem), daß man Software, die von einem selbst, meist aber von Anderen geschrieben ist, komfortabel nochmal verwenden kann. Diese

Mehr

Wir wollen in einer Bank die Konten der Kunden modellieren (um sie dann entspr. zu verarbeiten

Wir wollen in einer Bank die Konten der Kunden modellieren (um sie dann entspr. zu verarbeiten Noch ein Beispiel Wir wollen in einer Bank die Konten der Kunden modellieren (um sie dann entspr. zu verarbeiten public class Konto { private String kundenname; private double kontostand; private double

Mehr

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Einführung in den Einsatz von Objekt-Orientierung mit C++ I Einführung in den Einsatz von Objekt-Orientierung mit C++ I ADV-Seminar Leiter: Mag. Michael Hahsler Syntax von C++ Grundlagen Übersetzung Formale Syntaxüberprüfung Ausgabe/Eingabe Funktion main() Variablen

Mehr

Programmieren 2 12 Netzwerke

Programmieren 2 12 Netzwerke Programmieren 2 12 Netzwerke Bachelor Medieninformatik Sommersemester 2015 Dipl.-Inform. Ilse Schmiedecke schmiedecke@beuth-hochschule.de 1 Motivation Datenaustausch zwischen Programmen Spielstand Chat

Mehr

Überblick. 6. Konstruktor und Destruktor - obligatorische Elementfunktionen einer Klasse

Überblick. 6. Konstruktor und Destruktor - obligatorische Elementfunktionen einer Klasse Überblick 1. Einführung C++ / Entwicklung/ Sprachfamilie 2. Nicht objektorientierte Erweiterungen von C 2.1 Das Ein-/Ausgabekonzept von C++ 2.2 Referenzen in C++ 2.3 Heap-Allokatoren in C++ 3. Grundlagen

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

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

C++ Notnagel. Ziel, Inhalt. Programmieren in C++ C++ Notnagel Ziel, Inhalt Ich versuche in diesem Dokument noch einmal die Dinge zu erwähnen, die mir als absolut notwendig für den C++ Unterricht und die Prüfungen erscheinen. C++ Notnagel 1 Ziel, Inhalt

Mehr

10. OLAPLINE-Anwendertreffen

10. OLAPLINE-Anwendertreffen 10. OLAPLINE-Anwendertreffen 26. und 27. April 2017 Schloss Garath Düsseldorf Zwei Tage Weiterbildung und Networking integriert: Vorträge, Workshops und Erfahrungsaustausch rund um TM1 JAVA EXTENSIONS

Mehr

Java Referenzdatentypen genauer betrachtet

Java Referenzdatentypen genauer betrachtet Informatik 1 für Nebenfachstudierende Grundmodul Java Referenzdatentypen genauer betrachtet Kai-Steffen Hielscher Folienversion: 23. Januar 2018 Informatik 7 Rechnernetze und Kommunikationssysteme Referenzdatentypen

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

Anregungen zu Übung 2

Anregungen zu Übung 2 Anregungen zu Übung 2 Allgemeine Informatik II - SS 2007 Was sind Arrays und wie kann man sie verwenden? Ein Array ist ein spezieller Datentyp, der mehrere Werte zu einer Einheit zusammenfasst. Er ist

Mehr

Informatik I. Übung 2 : Programmieren in Eclipse. 5. März Daniel Hentzen

Informatik I. Übung 2 : Programmieren in Eclipse. 5. März Daniel Hentzen Informatik I Übung 2 : Programmieren in Eclipse 5. März 2014 Daniel Hentzen dhentzen@student.ethz.ch Downloads : http://n.ethz.ch/~dhentzen/download/ Heute 1. Nachbesprechung Übung 1 2. Theorie 3. Vorbesprechung

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Skript zur Vorlesung: Einführung in die Programmierung WiSe 2009 / 2010 Skript 2009 Christian Böhm, Peer Kröger, Arthur Zimek Prof. Dr. Christian Böhm Annahita Oswald Bianca Wackersreuther Ludwig-Maximilians-Universität

Mehr

Abschnitt 11: Beispiel: Die Klasse String (Teil 1)

Abschnitt 11: Beispiel: Die Klasse String (Teil 1) Abschnitt 11: Beispiel: Die Klasse String (Teil 1) 11. Beispiel: Die Klasse String (Teil 1) 11.1 Einführung 11.2 Die Klasse String und ihre Methoden 11.3 Effizientes dynamisches Arbeiten mit Zeichenketten

Mehr

Wintersemester 2009/10 Helmut Seidl Institut für Informatik TU München

Wintersemester 2009/10 Helmut Seidl Institut für Informatik TU München Informatik2 Wintersemester 2009/10 Helmut Seidl Institut für Informatik TU München 1 0 Allgemeines Inhalt dieser Vorlesung: Nebenläufigkeit in Java; Funktionales Programmieren mit OCaml :-) 2 1 Threads

Mehr

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

Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 8. Blatt Für den 16. und

Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 8. Blatt Für den 16. und Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 8. Blatt Für den 16. und 17.6.2008 Organisatorisches Um auf die Mailingliste aufgenommen zu werden schicke einfach eine

Mehr

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 4

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 4 Fachhochschule Stralsund Fachbereich Maschinenbau Lehrgebiet Informatik Prof. Dr.-Ing.Ch.Wahmkow Arbeitsblätter für die Lehrveranstaltung OOP JAVA 4 IV. Threads, Audiodateien, Bilder, Datumsfunktion, Aufruf

Mehr

Umsetzung einer Klassenkarte in einer Programmiersprache

Umsetzung einer Klassenkarte in einer Programmiersprache Klassen in Java Umsetzung einer Klassenkarte in einer Programmiersprache Objektorientierte Programme bestehen (nur) aus Klassendefinitionen In Klassendefinitionen wird die Struktur der Objekte festgelegt,

Mehr

Philosophen-Problem mit Threads 99

Philosophen-Problem mit Threads 99 Philosophen-Problem mit Threads 99 int main() { constexpr unsigned int PHILOSOPHERS = 5; std::thread philosopher[philosophers]; std::mutex fork[philosophers]; for (int i = 0; i < PHILOSOPHERS; ++i) { philosopher[i]

Mehr

Verteilte Systeme - Java Networking (Sockets) 2 -

Verteilte Systeme - Java Networking (Sockets) 2 - Verteilte Systeme - Java Networking (Sockets) 2 - Prof. Dr. Michael Cebulla 06. November 2014 Fachhochschule Schmalkalden Wintersemester 2014/15 1 / 30 Michael Cebulla Verteilte Systeme Gliederung Wiederholung:

Mehr

C-Pointer (Zeiger, Adressen) vs. C++ Referenzen

C-Pointer (Zeiger, Adressen) vs. C++ Referenzen C-Pointer (Zeiger, Adressen) vs. C++ Referenzen Der Pointer (C/C++): In C/C++ ist der Pointer ein eigener Datentyp, der auf Variablen/Objekte zeigen kann. Indem man den Pointer dereferenziert, gewinnt

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 27 Einstieg in die Informatik mit Java Klassen als Datenstrukturen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick: Klassen als Datenstruktur 2 Vereinbarung

Mehr

Threads Einführung. Zustände von Threads

Threads Einführung. Zustände von Threads Threads Einführung Parallelität : Zerlegung von Problemstellungen in Teilaufgaben, die parallelel ausgeführt werden können (einfachere Strukturen, eventuell schneller, Voraussetzung für Mehrprozessorarchitekturen)

Mehr

Programmierkurs C++ Templates & STL (1/2)

Programmierkurs C++ Templates & STL (1/2) Programmierkurs C++ Templates & STL (1/2) Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck https://www.itm.uni-luebeck.de/people/fischer #2 Templates Die wichtigsten objekt-orientierten

Mehr

Durch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren.

Durch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren. Durch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren. 267 Das hier skizzierte Problem basiert auf der strategischen Entscheidung

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

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