Software Engineering für moderne, parallele Plattformen. 6. Parallelität in C/C++ Dr. Victor Pankratius. Dr. Victor Pankratius

Größe: px
Ab Seite anzeigen:

Download "Software Engineering für moderne, parallele Plattformen. 6. Parallelität in C/C++ Dr. Victor Pankratius. Dr. Victor Pankratius"

Transkript

1 Software Engineering für moderne, parallele Plattformen 6. Parallelität in C/C++ IPD Tichy- Lehrstuhl für Programmiersysteme KIT die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)

2 Agenda Parallele Programmierung in C/C++ Allgemeines Ausgewählte Bibliotheksansätze Pthreads Threading Building Blocks OpenMP 2

3 Allgemeines In C/C++ gibt es momentan keine native Unterstützung für Parallelität Ansätze zur Erweiterung: Bibliotheken Spracherweiterungen Im Standardisierungsgremium von C++ wurden Erweiterungen im Hinblick auf Fäden und Sperren diskutiert ( C++0x Draft März 2009) 3

4 Pthreads Überblick (1) Bibliothek zum Arbeiten mit Fäden in C POSIX Threads IEEE-Standard (IEEE Std , 2004) Portable Operating System Interface Beschreibt Schnittstelle zwischen Applikationen und Betriebssystem Unix-Derivate halten sich mehr oder weniger daran Inzwischen auch für Windows erhältlich (Pthreads-win32) Verteilung von Fäden auf Prozessoren / Kerne sowie Ablaufplanung übernimmt das Betriebssystem 4

5 Pthreads Überblick (3) Pthreads Schnittstelle enthält mehr als 60 Funktionen Bezeichner beginnen mit pthread_ Typ pthread_ pthread_attr_ pthread_mutex_ pthread_mutexattr_ pthread_cond_ pthread_key_ Beschreibung Basisfunktionen (z.b. create, ) Fadenattribute (z.b. Scheduling, Priorität) Mutex-Variablen (z.b. init, lock, unlock) Mutex-Attribute (z.b. Mutex-Typ normal, recursive, ) Bedingungsvariablen ( wait, signal ) fadenspezifische Daten (erzeugt z.b. Datenschlüssel, der für alle Fäden sichtbar ist) 5

6 PThreads Erzeugen von Fäden (1) Jede Quelltextdatei, die die Pthreads-Bibliothek verwendet, muss pthread.h einbinden Initial hat das main()-programm einen Hauptfaden Alle anderen Fäden werden explizit vom Programmierer erzeugt pthread_create erzeugt und startet einen neuen Faden 6

7 PThreads Beispiel #include <pthread.h> #include <stdio.h> //Funktion, die ein Faden ausführen soll void* hello(void* id) { printf("%d: Hello world!\n", *((int*) id)); return 0; } int main(int argc, char* argv[]) { const int COUNT = 5; int i; pthread t thread[count]; int ids[count]; for (i = 0; i < COUNT; i++) { ids[i] = i; int retval = pthread create(&thread[i], NULL, hello, &ids[i]); if (retval) { perror("pthread_create failed"); return 1;} } for (i = 0; i < COUNT; i++) pthread_join(thread[i], NULL); return 0; } 7

8 PThreads Erzeugen von Fäden (2) int pthread_create ( pthread_t *tid, const pthread_attr_t *attr, void pthread_attr_t *(*start) (void *), void *arg); Erzeugt einen Faden, der die Funktion start mit Argument arg ausführt Aufruf ist asynchron implementierungsabhängig: Max. Anzahl erzeugbarer Fäden Argument attr spezifiziert optionale Attribute Z.B. für Scheduling, Priorität (Standard: NULL) Nach der Fadenerzeugung wird tid für Identifikation benutzt Fäden können selbst weitere Fäden erzeugen 8

9 PThreads Beenden von Fäden Verschiedene Möglichkeiten: Wenn main() endet, werden alle Fäden zerstört Faden kehrt von seiner Start-Routine zurück Faden ruft pthread_exit auf Achtung: Aufräumarbeiten werden nicht durchgeführt (z.b. können Dateien offen bleiben) Faden wird durch Aufruf von pthread_cancel durch einen anderen Faden abgebrochen Der gesamte Prozess wird durch den Aufruf von exec oder exit beendet 9

10 PThreads Beitreten eines Fadens ( Join ) int pthread_join( pthread_t thread, void **value_ptr); Hauptfaden pthread_create() Arbeiterfaden pthread_join() pthread_exit() der aufrufende Faden blockiert, bis der Faden mit der spezifizierten ID thread terminiert entsprechender Faden muss joinable sein val_ptr: Rückgabewert des beigetretenen Threads abfangen zurückgegebener Typ: (void *) NULL, wenn kein Rückgabewert erwartet wird 10

11 PThreads Lebenszyklus eines Fadens erzeugt Fertig zum Ausführen, wartet jedoch auf Prozessor ready Für Ausführung eingeteilt (scheduled) Warten beendet unterbrochen running Warten auf Ressource Wird gerade ausgeführt Fertig, cancel oder exit blocked Kann nicht ausgeführt werden (wartet z.b. auf Mutex, E/A,..) terminated Von start-funktion zurückgekehrt oder pthread_exit oder cancel 11

12 PThreads Mutex-Variablen (1) Mutex-Variable pthread_mutex_t mymutex; Muss vor Gebrauch initialisiert werden (zwei Möglichkeiten): int pthread_mutex_init( mutex, attr ); pthread_mutex_t mtx1 = PTHREAD_MUTEX_INITIALIZER //Makro Mutex-Variable wird vom aufrufenden Thread gehalten, bis dieser sie wieder freigibt ( unlock ) 12

13 PThreads Mutex-Variablen (2) Sperren / Entsperren int pthread_mutex_lock( mutex ); int pthread_mutex_unlock( mutex ); 13

14 PThreads Mutex-Variablen - Beispiel #define NUMTHREADS 4 pthread_mutex_t gmutex; int g_sum = 0; void *threadfunc(void *arg) { int mysum = bigcomputation(); pthread_mutex_lock( &gmutex ); g_sum += mysum; pthread_mutex_unlock( &gmutex ); } // kritischer Abschnitt main() { pthread_t hthread[numthreads]; pthread_mutex_init( &gmutex, NULL ); for (int i = 0; i < NUMTHREADS; i++) pthread_create(&hthread[i],null,threadfunc,null); 14 } for (int i = 0; i < NUMTHREADS; i++) pthread_join(hthread[i]); printf ( Global sum = %f\n, g_sum); Prof. Dr. W. F. Tichy, Dr. V. Pankratius, F. Otto

15 PThreads Mutex-Typen int pthread_mutexattr_settype( pthread_mutexattr_t *attr, int type); PTHREAD_MUTEX_NORMAL Faden, der bereits gesetzte Sperre noch einmal sperren will, erzeugt Verklemmung (Deadlock) trylock() verwenden. Verhalten undefiniert, wenn unlock bei nicht gesetzter Sperre durchgeführt wird bzw. wenn zweiter Faden Sperre eines anderen Fadens entsperren will. PTHREAD_MUTEX_ERRORCHECK Obige Operationen erzeugen Fehlermeldungen. PTHREAD_MUTEX_RECURSIVE Faden, der bereits Sperre hält, kann sie erneut akquirieren. Gleiche Anzahl von unlock-aufrufen nötig, um Sperre freizugeben. Rest der obigen Operationen erzeugt Fehlermeldung. PTHREAD_MUTEX_DEFAULT Im Standard: An implementation may map this mutex to one of the other mutex types 15

16 PThreads Bedingungsvariablen Bedingungsvariablen (Condition Variables) Signal / Wait Mechanismus in PThreads Warten, bis bestimmte Bedingung erfüllt ist Hintergrund: Effizient warten (ohne Polling) und Sperren in der Zwischenzeit aufgeben, um Fortschritt zu ermöglichen Wert der Bedingungsvariablen bestimmt, ob Faden warten muss oder mit Ausführung fortfahren darf 16

17 PThreads Bedingungsvariablen Prinzip Faden 1 Faden 2 pthread_mutex_lock(&mtx); while (state!= 5) { pthread_cond_wait(&cv,&mtx); } pthread_mutex_unlock(&mtx); acquiriere mutex while (negierte Bedingung ist wahr) {wait auf Bedingungsvariable} //else Kritischer Abschnitt gib mutex frei pthread_mutex_lock(&mtx); state++; pthread_cond_broadcast(&cv); pthread_mutex_unlock(&mtx); Mutex wird automatisch freigegeben, solange der Faden wartet 17

18 PThreads Bedingungsvariablen pthread_cond_t mycond; Initialisieren vor Gebrauch bzw. Zerstören einer Bedingungsvariable pthread_cond_init( cond, attr ) pthread_cond_destroy( cond ) pthread_cond_wait( cond, mutex ) Blockiert Faden, bis er ein entsprechendes Signal über eine Bedingungsvariable erhält (mutex wird währenddessen freigegeben) Muss mit gesperrter mutex-variablen aufgerufen werden (sonst undef.) pthread_cond_signal( cond ) Weckt mindestens einen der blockierten Fäden auf pthread_cond_broadcast( cond ) Alle blockierten Fäden werden aufgeweckt 18 18

19 PThreads Bedingungsvariablen Signale werden nicht gespeichert Wenn kein Faden wartet, ist ein zu dem Zeitpunkt gesendetes Signal verloren ( lost signal ) Ein Faden verhungert, wenn er auf ein Signal wartet, das nicht mehr gesendet wird 19

20 Threading Building Blocks Überblick (1) Intels Bibliotheksansatz zum parallelen Programmieren in C/C++ Open Source (aktuelle Version: 3.0) Ein TBB-Faden intern realisiert als Hüllklasse um plattformspezifischen Faden (Win32 API, PThreads) Konstrukte auf höherer Abstraktionsebene als PThreads, z.b. Parallele Schleifen Fließband (Pipeline) Aufgabenorientierter Parallelismus (Task Parallelism) 20

21 Threading Building Blocks Überblick (2) Bibliothek kann gleichzeitig auch mit anderen Bibliotheken oder OpenMP verwendet werden Im Folgenden einige ausgewählte Inhalte 21

22 Threading Building Blocks Überblick (3) Historisches Pragmas OpenMP fork/join tasks Languages Threaded-C continuation tasks task stealing Cilk space efficient scheduler cache-oblivious algorithms OpenMP taskqueue while and recursion Libraries JSR166 containers Chare Kernel STL small tasks generic programming STAPL recursive ranges 2006 ECMA CLI parallel iteration classes Intel Threading Building Blocks McRT 22 Key influences on design of Intel Threading Building Blocks Reinders, Intel Threading Building Blocks, O Reilly, 2007

23 Threading Building Blocks Überblick (4) Konstrukte parallel_for parallel_do parallel_reduce pipeline parallel_sort parallel_scan Container concurrent_hash_map concurrent_queue concurrent_vector Aufgabenabwickler (Task Scheduler) 23 Konstrukte für Synchronisation atomic, spin_mutex, spin_rw_mutex, queuing_mutex, queuing_rw_mutex, mutex Konstrukte zur Speicherallokation cache_aligned_allocator scalable_allocator

24 Threading Building Blocks Minimales Programmgerüst Initialisiert Task Scheduler #include tbb/task_scheduler_init.h using namespace tbb; int main() { task_scheduler_init init; return 0; } 24

25 Threading Building Blocks Container Die Container-Datenstrukturen in der Standard Template Library von C++ sind im parallelen Fall nicht anwendbar Threading Building Blocks stellt folgende Container zur Verfügung concurrent_hash_map Entwickler kann Hash- und Vergleichsoperationen selbst definieren concurrent_vector Größe dynamisch änderbar concurrent_queue Schlange mit blockierenden und nicht blockierende Operationen (pop bzw. pop_if_present) Aktives Warten beim Blockieren Wartezeiten sollten kurz sein! 25

26 Vorbereitung zu Parallel For Exkurs: Funktionsobjekte in C++ (1) Konstruktion einer Klasse die wie eine Funktion benutzt werden kann Überlädt operator() Operator für Methodenaufruf Kann Zustand kapseln (im Gegensatz zu reinen Funktionszeigern) Es kann mehrere Objektinstanzen geben class MyFunc {... public: void operator() (...) {...} }; MyFunc f; f(...); //ruft MyFunc::operator() auf 26

27 Vorbereitung zu Parallel For Exkurs: Funktionsobjekte in C++ (2) Beispiel: Akkumulation template<class T> class AccumulateSum { T accvalue; public: Sum(T initvalue) {accvalue=initvalue;} void operator()(t x) {accvalue +=x;} T result() const {return accvalue;} }; void test (list<double>& mylist) { AccumulateSum<double> accsumobj(0); //rufe accsumobj() für jedes Element der Liste auf for_each(mylist.begin(), mylist.end(), accsumobj); 27 } cout << "Die Summe ist: "<<accsumobj.result() << n ;

28 Threading Building Blocks Schleifen Beispiel: Sequenzielles Manipulieren eines Arrays void ChangeArraySerial (int* a, int n) { for (int i=0; i<n; i++) { Foo (a[i]); } } 28

29 Threading Building Blocks Parallel For #include "tbb/blocked_range.h" #include "tbb/parallel_for.h using namespace tbb; Aufgabe, die parallel ausgeführt werden soll class ChangeArray { int* a; public: ChangeArray(int* _a) {a=_a;} void operator()(const blocked_range<int>& r) const { for (int i=r.begin(); i!=r.end(); i++){ Foo(a[i]); }}}; 29 void ChangeArrayParallel (int* a, int n) { parallel_for(blocked_range<int>(0,n,agrainsize), ChangeArray(a)); } Rufe generische Funktion auf: parallel_for<range, body> hier mit: range blocked_range; body ChangeArray

30 Threading Building Blocks Parallel For 30 #include "tbb/blocked_range.h" #include Repräsentiert "tbb/parallel_for.h Intervall using Allgemein namespace kann range tbb; ein Intervall rekursiv in zwei Teile aufteilen, bis eine class vordefinierten ChangeArray Größe erreicht { ist int* (unterschiedliche a; Arten der Aufteilung public: möglich) ChangeArray(int* _a) {a=_a;} blocked_range: void operator()(const eindimensionaler, blocked_range<int>& r) const { gleichmäßig for (int aufgeteilter i=r.begin(); Iterationsraum i!=r.end(); i++){ über int Foo(a[i]); }}}; iteriere von 0 Kleinste bis n-1 Intervallgröße void ChangeArrayParallel (int* a, int n) { parallel_for(blocked_range<int>(0,n,agrainsize), ChangeArray(a)); }

31 Threading Building Blocks Parallel For 31 #include "tbb/blocked_range.h" #include "tbb/parallel_for.h using namespace tbb; class ChangeArray { int* a; public: ChangeArray(int* _a) {a=_a;} void operator()(const blocked_range<int>& r) const { }}}; for (int i=r.begin(); i!=r.end(); i++){ Foo(a[i]); void ChangeArrayParallel (int* a, int n) { parallel_for(blocked_range<int>(0,n,agrainsize), ChangeArray(a)); } Aus ChangeArray wird Funktionsobjekt erzeugt Für jeden Arbeiterfaden werden durch parallel_for separate Kopien des Funktionsobjekts mit unterschiedlichen Intervallgrenzen erzeugt modifizierter Schleifenrumpf aus dem sequenziellen Fall

32 Threading Building Blocks Parallel For und Lambda-Ausdrücke Anmerkung: Hätte C++ folgende Spracherweiterung, könnte man auf explizite Erzeugung von Funktionsobjekten verzichten //mit Lambda-Ausdruck 32 void ParallelApplyFoo(size_t n, int x) { parallel_for ( blocked_range<size_t>(0,n,10), <>(const blocked_range<size_t>& r) { for(size_t i=r.begin(); i<r.end();++i) Schleifenrumpf Foo(i,x); } Im C++ Standardkomittee vorgeschlagene Erweiterung für ); Lambda-Ausdrücke (vgl. Willcock, Lambda expressions and closures for C++, } 2006 und Järvi, Lambda Functions for C++0x, ACM SAC, 2008). Bedeutung von <> : Compiler soll automatisch den nachfolgenden Ausdruck in ein Funktionsobjekt konvertieren. Lambda-Ausdrücke würden generell die Übergabe von Code-Blöcken als Parameter erlauben und Schreibarbeit vereinfachen. (vgl. auch C# Delegates)

33 Threading Building Blocks Parallel For Prinzip der Gebietszerlegung - Aufgabenbaum Teile Intervall ( range ) auf [data, data+n[ [data, data+n/2[ [data+n/2, data+n[ rekursiv [data, data+n/k[ bis grainsize [data, data+grainsize[ Tasks für Work Stealing 33

34 Threading Building Blocks Partitionierer Spezifiziert Strategie für Ausführung von Schleifen parallel_for u.a. Konstrukte rufen Partitionierer auf, wenn range aufgeteilt werden soll jedes range-objekt ist mit einem partitioner-objekt assoziiert Partitionierer bestimmt wie Intervall aufgeteilt werden soll Gebietszerlegung Bis zu welcher Intervallgröße grainsize 34

35 Threading Building Blocks Partitionierer Partitionierer kann z.b. als optionaler dritter Parameter für parallel_for verwendet werden simple_partitioner (Standard) Aufteilung bis zu kleinsten Teilen der Größe grainsize auto_partitioner Gerade genug Aufteilungen, um Lastverteilung zu ermöglichen. Bei Bedarf werden neue Partitionen erzeugt. affinity_partitioner Wie auto_partitioner, jedoch mit besserer Cache-Affinität. Benachbarte Iterationen werden ggf. auf gleiche Arbeiterfäden verteilt. 35

36 Threading Building Blocks Fließbänder (1) Fließband (Pipeline): Besteht aus Sequenz von Filtern Auszug: class pipeline { public:... void add_filter( filter& f ); void run(size_t max_num_of_live_tokens); }; Kontrolliert die Anzahl der parallelen Tasks, die maximal existieren können Ein Filter f arbeitet sequenziell oder parallel mit mehreren Fäden Übergabe von Elementen zwischen Stufen erfolgt über Zeiger 36

37 Threading Building Blocks Fließbänder (2) Filter werden von Klasse filter geerbt Filter überschreibt virtual void* operator()( void * item ); Diese Methode wird von der Pipeline aufgerufen, um innerhalb eines Filters ein Element zu verarbeiten Parameter item zeigt auf das Element, das verarbeitet werden soll Der Rückgabewert zeigt auf das Element, das der nächsten Stufe übergeben werden soll Beispiel mit dreistufiger Pipeline: Lese Datei ein, transformiere Kleinbuchstaben in Großbuchstaben, schreibe Ergebnis in Datei 37

38 Threading Building Blocks Fließbänder (3) Beispiel...//FILE* input_file = fopen(inputfilename,"r");...//file* output_file = fopen(outputfilename,"r"); // Create the pipeline tbb::pipeline pipeline; // Erzeuge Eingabefilter (lese Datei ein, generiere Strom) MyInputFilter input_filter( input_file ); pipeline.add_filter( input_filter ); // Verarbeitungsfilter (transf. zu Großbuchstaben) MyTransformFilter transform_filter; pipeline.add_filter( transform_filter ); // Ausgabefilter für Dateiausgabe MyOutputFilter output_filter( output_file ); pipeline.add_filter( output_filter ); Datei Filter 1 Zeichenblöcke einlesen Filter 2 (klein groß) Filter 3 Dateiausgabe 38 // Führe Pipeline aus pipeline.run( MyInputFilter::n_buffer ); pipeline.clear(); fclose( output_file ); fclose( input_file );...

39 Threading Building Blocks Fließbänder (4) Beispiel // Mittlerer Filter //transformiert Keinbuchstaben zu Großbuchstaben 39 class MyTransformFilter: public tbb::filter { public: MyTransformFilter(); void* operator()( void* item ); //überschreibe Methode };... Konstruktor etc.... Operator() bekommt Zeiger auf Block von Zeichen und liefert einen Zeiger auf konvertiertem Block, der der nächsten Stufe übergeben werden soll. void* MyTransformFilter::operator()( void* item ) { MyBuffer& b = *static_cast<mybuffer*>(item); // konvertiere Puffer zu Großbuchstaben return &b; } Explizite Typkonvertierung, die zur Übersetzungszeit geprüft wird Semantik: Speicher, worauf item zeigt, wird als MyBuffer benutzt

40 Threading Building Blocks Fließbänder (5) Die Bibliothek unterstützt zur Zeit nur lineare Fließbänder Nicht-lineare Fließbänder könnten behelfsmäßig mit Hilfe einer topologischen Sortierung der Stufen durch linearer Fließbänder realisiert werden A 1 C 3 D 4 B 2 E 5 40

41 Threading Building Blocks Konstrukte zur Synchronisation Fair (bevorzugt länger wartende Fäden) Reentrant (Bei Rekursion anwendbar) mutex BS abhängig Nein Ja spin_mutex Nein Nein Nein queuing_mutex Ja Nein Nein spin_rw_mutex Nein Nein Nein queuing_rw_mutex Ja Nein Nein schlafen beim Warten (sonst Schleife) Scoped Locking -Muster wird benutzt Sperre in Wächterklasse Kein explizites Freigeben, Destruktor der Wächterklasse gibt Sperre automatisch frei Sicher beim Auslösen von Ausnahmen 41

42 Threading Building Blocks Atomare Operationen atomic<t> bietet atomare Operationen auf Typ T = x Lese Wert von x x = Schreibe Wert von x und gib ihn zurück x.fetch_and_store(y) Setze y=x und liefere alten x-wert x.fetch_and_add(y) Setze x+=y und liefere alten x-wert x.compare_and_swap(n,z) Wenn x==z, setze x=n; liefere in beiden Fällen alten x-wert zurück Interne Implementierung bildet atomare Operationen auf native, atomare Prozessorbefehle ab Vordefinierte Abbildungen für verschiedene Prozessor-Plattformen Z.B. compare_and_swap... mov rax,r8 lock cmpxchg [rcx],dl ret... 42

43 Threading Building Blocks Aufspalten von Aufgaben Illustration am Beispiel // Fibonacci sequenziell long SerialFib( long n ) { if( n<2 ) return n; else return SerialFib(n-1)+SerialFib(n-2); } 43

44 Threading Building Blocks Aufspalten von Aufgaben Parallele Version Aufgaben müssen mit allocate- Methoden Speicher reservieren Erzeugt Wurzel des Aufgabenbaums Konstruktor von FibTask long ParallelFib( long n ) { long sum; FibTask& a = *new(task::allocate_root()) FibTask(n,&sum); task::spawn_root_and_wait(a); return sum; } Ausführen und warten bis fertig Anmerkung: Hier steht Demonstration des Task-Konzepts im Vordergrund. Es gibt effizientere Möglichkeiten, Fibonacci-Zahlen zu berechnen. 44

45 Threading Building Blocks Aufspalten von Aufgaben class FibTask: public task { public: const long n; long* const sum; FibTask( long n_, long* sum_ ):n(n_), sum(sum_) {} task* execute() { if( n<cutoff ) { *sum = SerialFib(n); } else { long x, y; FibTask& a = *new( allocate_child() ) FibTask(n-1,&x); FibTask& b = *new( allocate_child() ) FibTask(n-2,&y); set_ref_count(3); spawn( b ); spawn_and_wait_for_all( a ); //starte a, warte auf *sum = x+y; //alle Kinder, d.h. a,b } return NULL; }}; 45

46 Ausblick Weitere Bibliotheken zur parallelen Programmierung in C/C++ Boost ( Einige Auszüge: Klasse boost::thread erzeugt und verwaltet Faden Fäden können zu Gruppen hinzugefügt werden Sperren Konzepte Lockable: Sperre exklusiv für einen Faden Timed lockable: Blockierendes Warten auf Sperre kann zeitlich begrenzt werden SharedLockable: Wie z.b. bei Lese-Schreib-Sperre (mehrere Fäden können gleichzeitig lesen, aber nur einer schreiben) UpgradeLockable: Von gemeinsamer Nutzung einer Sperre auf exklusive Nutzung Barrieren Bedingungsvariablen 46

47 Ausblick Weitere Bibliotheken zur parallelen Programmierung in C/C++ QtConcurrent (trolltech.com) Konzepte auf niedriger Abstraktionsebene (Sperren, Semaphore, ) Konzepte auf höherer Abstraktionsebene QtConcurrent::map() wendet Funktion parallel auf mehrere Elemene an QtConcurrent::mappedReduced() nach map wird Ergebnis mit Reduktionsoperation zu einem einzigen Ergebnis verdichtet QtConcurrent::filter() benutzt Filterfunktion um Elemente zu entfernen QtConcurrent::filteredReduced() gefiltertes Ergebnis Ergebnis wird mit Reduktionsoperation zu einem einzigen Ergebnis verdichtet QtConcurrent::run() führt eine Funktion in einem neuen Faden aus QFuture wie Futures QFutureWatcher Überwachen einer QFuture 47

48 Ausblick Weitere Bibliotheken zur parallelen Programmierung in C/C++ GNU libstdc++ parallel mode Parallelisierte Algorithmen der Standard Template Library Z.B. Suche, Sortieren, numerische Algorithmen, Im gcc V 4.3 parallel mode bereits enthalten In Karlsruhe entstanden 48

PThreads. Pthreads. Jeder Hersteller hatte eine eigene Implementierung von Threads oder light weight processes

PThreads. Pthreads. Jeder Hersteller hatte eine eigene Implementierung von Threads oder light weight processes PThreads Prozesse und Threads Ein Unix-Prozess hat IDs (process,user,group) Umgebungsvariablen Verzeichnis Programmcode Register, Stack, Heap Dateideskriptoren, Signale message queues, pipes, shared memory

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

Softwaresysteme I Übungen Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2007 U9.fm

Softwaresysteme I Übungen Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2007 U9.fm U9 9. Übung U9 9. Übung U9-1 Überblick Besprechung Aufgabe 6 (printdir) Posix-Threads U9.1 U9-2 Motivation von Threads U9-2 Motivation von Threads UNIX-Prozesskonzept: eine Ausführungsumgebung (virtueller

Mehr

Shared-Memory Programmiermodelle

Shared-Memory Programmiermodelle Shared-Memory Programmiermodelle mehrere, unabhängige Programmsegmente greifen direkt auf gemeinsame Variablen ( shared variables ) zu Prozeßmodell gemäß fork/join Prinzip, z.b. in Unix: fork: Erzeugung

Mehr

U9-3 Vergleich von Thread-Konzepten. U9-2 Motivation von Threads. U9-3 Vergleich von Thread-Konzepten (2) U9-1 Überblick

U9-3 Vergleich von Thread-Konzepten. U9-2 Motivation von Threads. U9-3 Vergleich von Thread-Konzepten (2) U9-1 Überblick U9 9. Übung U9 9. Übung U9-1 Überblick Besprechung Aufgabe 6 (printdir) Posix-Threads U9.1 User-Level Threads: Federgewichtige Prozesse Realisierung von Threads auf Anwendungsebene innerhalb eines Prozesses

Mehr

Monitore. Klicken bearbeiten

Monitore. Klicken bearbeiten Sascha Kretzschmann Institut für Informatik Monitore Formatvorlage und deren Umsetzung des Untertitelmasters durch Klicken bearbeiten Inhalt 1. Monitore und Concurrent Pascal 1.1 Warum Monitore? 1.2 Monitordefinition

Mehr

POSIX-Threads. Aufgabe 9 SP - Ü U10.1

POSIX-Threads. Aufgabe 9 SP - Ü U10.1 U10 10. Übung U10 10. Übung POSIX-Threads Aufgabe 9 U10.1 U10-1 Motivation von Threads U10-1 Motivation von Threads UNIX-Prozesskonzept: eine Ausführungsumgebung (virtueller Adressraum, Rechte, Priorität,...)

Mehr

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung: Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Der Sourcecode wird an den entsprechenden Stellen im Programm wiederholt Programm wird lang

Mehr

I 7. Übung. I-1 Überblick. Besprechung Aufgabe 5 (mysh) Online-Evaluation. Posix Threads. Ü SoS I I.1

I 7. Übung. I-1 Überblick. Besprechung Aufgabe 5 (mysh) Online-Evaluation. Posix Threads. Ü SoS I I.1 I 7. Übung I 7. Übung I-1 Überblick Besprechung Aufgabe 5 (mysh) Online-Evaluation Posix Threads I.1 I-2 Evaluation I-2 Evaluation Online-Evaluation von Vorlesung und Übung SOS zwei TANs, zwei Fragebogen

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) Wintersemester 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät für Informatik Lehrstuhl

Mehr

1 Vom Problem zum Programm

1 Vom Problem zum Programm Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren

Mehr

Softwarelösungen: Versuch 4

Softwarelösungen: Versuch 4 Softwarelösungen: Versuch 4 Nichtstun in Schleife wird ersetzt durch zeitweilige Zurücknahme der Anforderung, um es anderen Prozessen zu erlauben, die Ressource zu belegen: /* Prozess 0 */ wiederhole flag[0]

Mehr

Zählen von Objekten einer bestimmten Klasse

Zählen von Objekten einer bestimmten Klasse Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

OpenMP am Beispiel der Matrizenmultiplikation

OpenMP am Beispiel der Matrizenmultiplikation OpenMP am Beispiel der Matrizenmultiplikation David J. Meder, Dr. Victor Pankratius IPD Tichy Lehrstuhl für Programmiersysteme KIT die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe

Mehr

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015 Software Engineering Zur Architektur der Applikation Data Repository Franz-Josef Elmer, Universität Basel, HS 2015 Software Engineering: Mit acht bewährten Praktiken zu gutem Code 2 Schichtarchitektur

Mehr

U8 POSIX-Threads U8 POSIX-Threads

U8 POSIX-Threads U8 POSIX-Threads U8 POSIX-Threads U8 POSIX-Threads Motivation Thread-Konzepte pthread-api pthread-koordinierung U8.1 U8-1 Motivation von Threads U8-1 Motivation von Threads UNIX-Prozesskonzept: eine Ausführungsumgebung

Mehr

RTEMS- Echtzeitbetriebssystem

RTEMS- Echtzeitbetriebssystem RTEMS- Echtzeitbetriebssystem Name: Hussein Hammoud Matrikel- Nr.: 230768 Studiengang: Technische Informatik Fach: Projekt Eingebettete Kommunikation Technische Universität Berlin Sommersemester 2006 RTEMS-

Mehr

Nebenläufige Programmierung

Nebenläufige Programmierung Nebenläufige Programmierung Perspektiven der Informatik 27. Januar 2003 Gert Smolka Telefon-Szenario Eine Telefonzelle Mehrere Personen wollen telefonieren Immer nur eine Person kann telefonieren Ressource

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund - mit / ohne Parameter - mit / ohne Rückgabewerte

Mehr

U8-1 Motivation von Threads. U8-2 Vergleich von Thread-Konzepten. U8-2 Vergleich von Thread-Konzepten (2) Motivation

U8-1 Motivation von Threads. U8-2 Vergleich von Thread-Konzepten. U8-2 Vergleich von Thread-Konzepten (2) Motivation U8 POSIX-Threads U8 POSIX-Threads U8-1 Motivation von Threads U8-1 Motivation von Threads Motivation Thread-Konzepte UNIX-Prozesskonzept: eine Ausführungsumgebung (virtueller Adressraum, Rechte, Priorität,...)

Mehr

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss Systeme 1 Kapitel 6 Nebenläufigkeit und wechselseitiger Ausschluss Threads Die Adressräume verschiedener Prozesse sind getrennt und geschützt gegen den Zugriff anderer Prozesse. Threads sind leichtgewichtige

Mehr

Klausur in Programmieren

Klausur in Programmieren Studiengang Sensorik/Sensorsystemtechnik Note / normierte Punkte Klausur in Programmieren Sommer 2014, 16. Juli 2014 Dauer: 1,5h Hilfsmittel: Keine (Wörterbücher sind auf Nachfrage erlaubt) Name: Matrikelnr.:

Mehr

Prozeß P1 Prozeß P2. Zur Synchronisation stehen den beiden Prozessen binäre Semaphore und die beiden Funktionen

Prozeß P1 Prozeß P2. Zur Synchronisation stehen den beiden Prozessen binäre Semaphore und die beiden Funktionen Seite 8 A UFGABE 11 INTERP ROZEßKOMMUNIKATION Das folgende Petrinetz zeigt zwei verkoppelte Prozesse P1 und P2. Die Transitionen a und b beschreiben Aktionen von P1, die Transitionen c und d Aktionen von

Mehr

Intel Threading Building Blocks (TBB)

Intel Threading Building Blocks (TBB) Intel Threading Building Blocks (TBB) Julius Adorf 26.10.2009 Seminar: Semantics of C++ TU München Tejas und Jayhawk? Intel Threading Building Blocks (TBB) Parallelisierung für C++ eine Bibliothek mittlerweile

Mehr

Dämon-Prozesse ( deamon )

Dämon-Prozesse ( deamon ) Prozesse unter UNIX - Prozessarten Interaktive Prozesse Shell-Prozesse arbeiten mit stdin ( Tastatur ) und stdout ( Bildschirm ) Dämon-Prozesse ( deamon ) arbeiten im Hintergrund ohne stdin und stdout

Mehr

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur Unterprogramme Unterprogramme sind abgekapselte Programmfragmente, welche es erlauben, bestimmte Aufgaben in wiederverwendbarer Art umzusetzen. Man unterscheidet zwischen Unterprogrammen mit Rückgabewert

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse Übung 03: Schleifen Abgabetermin: xx.xx.xxxx Name: Matrikelnummer: Gruppe: G1 (Prähofer) G2 (Prähofer) G3 (Wolfinger) Aufgabe Punkte gelöst abzugeben schriftlich abzugeben elektronisch Aufgabe 03.1 12

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags Pommes... Praktikum A 230 C 207 (Madeleine) F 112 F 113 (Kevin) E

Mehr

Tafelübung zu BS 2. Threadsynchronisation

Tafelübung zu BS 2. Threadsynchronisation Tafelübung zu BS 2. Threadsynchronisation Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/

Mehr

Software Engineering Interaktionsdiagramme

Software Engineering Interaktionsdiagramme Software Engineering Interaktionsdiagramme Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Nachrichtenaustausch Welche Nachrichten werden ausgetauscht? (Methodenaufrufe)

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff Programmieren in C Felder, Schleifen und Fließkommaarithmetik Prof. Dr. Nikolaus Wulff Addition von Zahlen 1 2 3 4 5 #include int main() { int x,y,z,sum; x = 1; y = 2; z = 4; sum = x + y + z;

Mehr

Prinzipien Objektorientierter Programmierung

Prinzipien Objektorientierter Programmierung Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................

Mehr

U6-1 Organisatories. U6-2 Motivation von Threads. U6-3 Vergleich von Thread-Konzepten. Organisatorisches

U6-1 Organisatories. U6-2 Motivation von Threads. U6-3 Vergleich von Thread-Konzepten. Organisatorisches U6 6. Übung U6 6. Übung U6-1 Organisatories U6-1 Organisatories Organisatorisches Zusätzliche Tafelübung zur S1-Klaurvorbereitung Besprechung Aufgabe 5 (crawl) OSIX-Threads Motivation Thread-Konzepte am

Mehr

Universität Karlsruhe (TH)

Universität Karlsruhe (TH) Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 ZPL Prof. Dr. Walter F. Tichy Dr. Victor Pankratius Ali Jannesari Agenda 1. ZPL Überblick 2. Konzepte von ZPL Regionen, Region Specifiers

Mehr

Technische Dokumentation SilentStatistikTool

Technische Dokumentation SilentStatistikTool Technische Dokumentation SilentStatistikTool Version 1.0 Marko Schröder 1115063 Inhalt Einleitung... 3 Klasse Program... 3 Klasse ArgumentHandler... 3 Bereitgestellte Variablen... 3 Bereitgestellte Methoden...

Mehr

Tipps und Tricks zu Netop Vision und Vision Pro

Tipps und Tricks zu Netop Vision und Vision Pro Tipps und Tricks zu Netop Vision und Vision Pro Anwendungen auf Schülercomputer freigeben und starten Netop Vision ermöglicht Ihnen, Anwendungen und Dateien auf allen Schülercomputern gleichzeitig zu starten.

Mehr

Einführung in die C++ Programmierung für Ingenieure

Einführung in die C++ Programmierung für Ingenieure Einführung in die C++ Programmierung für Ingenieure MATTHIAS WALTER / JENS KLUNKER Universität Rostock, Lehrstuhl für Modellierung und Simulation 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK FACULTY OF

Mehr

Besprechung Aufgabe 5 (crawl) POSIX-Threads. Problem: UNIX-Prozesskonzept ist für viele heutige Anwendungen unzureichend

Besprechung Aufgabe 5 (crawl) POSIX-Threads. Problem: UNIX-Prozesskonzept ist für viele heutige Anwendungen unzureichend U7 6. Übung U7 6. Übung U7-1 Motivation von Threads U7-1 Motivation von Threads Besprechung Aufgabe 5 (crawl) OSIX-Threads Motivation Thread-Konzepte pthread-ai Koordinierung UNIX-rozesskonzept: eine Ausführungsumgebung

Mehr

Erwin Grüner 09.02.2006

Erwin Grüner 09.02.2006 FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife

Mehr

.NET Code schützen. Projekt.NET. Version 1.0

.NET Code schützen. Projekt.NET. Version 1.0 .NET Code schützen Projekt.NET Informationsmaterial zum Schützen des.net Codes Version 1.0 Autor: Status: Ablage: Empfänger: Seiten: D. Hoyer 1 / 6 Verteiler : Dokument1 Seite 1 von 1 Änderungsprotokoll

Mehr

Architektur Verteilter Systeme Teil 2: Prozesse und Threads

Architektur Verteilter Systeme Teil 2: Prozesse und Threads Architektur Verteilter Systeme Teil 2: Prozesse und Threads 21.10.15 1 Übersicht Prozess Thread Scheduler Time Sharing 2 Begriff Prozess und Thread I Prozess = Sequentiell ablaufendes Programm Thread =

Mehr

Applet Firewall und Freigabe der Objekte

Applet Firewall und Freigabe der Objekte Hauptseminar Applet Firewall und Freigabe der Objekte Nachweis von Sicherheitseigenschaften für JavaCard Jin Zhou Ein Überblick über diesen Vortrag Applet Firewall Kontext JCRE Entry Point Objekt Shareable

Mehr

Universität Karlsruhe (TH)

Universität Karlsruhe (TH) Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 Cluster-Praktikum Sommersemester 2007 Transparent Replizierte Objekte in JavaParty Institut für Programmstrukturen und Datenorganisation

Mehr

SEP 114. Design by Contract

SEP 114. Design by Contract Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit

Mehr

Übungsblatt 3: Algorithmen in Java & Grammatiken

Übungsblatt 3: Algorithmen in Java & Grammatiken Humboldt-Universität zu Berlin Grundlagen der Programmierung (Vorlesung von Prof. Bothe) Institut für Informatik WS 15/16 Übungsblatt 3: Algorithmen in Java & Grammatiken Abgabe: bis 9:00 Uhr am 30.11.2015

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

Deklarationen in C. Prof. Dr. Margarita Esponda Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.

Mehr

Objektbasierte Entwicklung

Objektbasierte Entwicklung Embedded Software Objektbasierte Entwicklung Objektorientierung in C? Prof. Dr. Nikolaus Wulff Objektbasiert entwickeln Ohne C++ wird meist C im alten Stil programmiert. => Ein endlose while-schleife mit

Mehr

Automatisierung ( Fernsteuerung ) von Excel unter Microsoft Windows Tilman Küpper (tilman.kuepper@hm.edu)

Automatisierung ( Fernsteuerung ) von Excel unter Microsoft Windows Tilman Küpper (tilman.kuepper@hm.edu) HMExcel Automatisierung ( Fernsteuerung ) von Excel unter Microsoft Windows Tilman Küpper (tilman.kuepper@hm.edu) Inhalt 1. Einleitung...1 2. Beispiele...2 2.1. Daten in ein Tabellenblatt schreiben...2

Mehr

Computerarithmetik ( )

Computerarithmetik ( ) Anhang A Computerarithmetik ( ) A.1 Zahlendarstellung im Rechner und Computerarithmetik Prinzipiell ist die Menge der im Computer darstellbaren Zahlen endlich. Wie groß diese Menge ist, hängt von der Rechnerarchitektur

Mehr

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten In dem Virtuellen Seminarordner werden für die Teilnehmerinnen und Teilnehmer des Seminars alle für das Seminar wichtigen Informationen,

Mehr

Tutorium Rechnerorganisation

Tutorium Rechnerorganisation Woche 2 Tutorien 3 und 4 zur Vorlesung Rechnerorganisation 1 Christian A. Mandery: KIT Universität des Landes Baden-Württemberg und nationales Grossforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu

Mehr

Grundlagen von Python

Grundlagen von Python Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren

Mehr

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {... PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:

Mehr

2. Semester, 2. Prüfung, Lösung

2. Semester, 2. Prüfung, Lösung 2. Semester, 2. Prüfung, Lösung Name Die gesamte Prüfung bezieht sich auf die Programmierung in C++! Prüfungsdauer: 90 Minuten Mit Kugelschreiber oder Tinte schreiben Lösungen können direkt auf die Aufgabenblätter

Mehr

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg. Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 Klausurteilnehmer Name: Matrikelnummer: Wichtige Hinweise Es sind keinerlei Hilfsmittel zugelassen auch keine Taschenrechner! Die Klausur dauert

Mehr

Einführung in die Programmierung (EPR)

Einführung in die Programmierung (EPR) Goethe-Center for Scientific Computing (G-CSC) Goethe-Universität Frankfurt am Main Einführung in die Programmierung (EPR) (Übung, Wintersemester 2014/2015) Dr. S. Reiter, M. Rupp, Dr. A. Vogel, Dr. K.

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005 Einführung in die objektorientierte Programmierung mit Java Klausur am 19. Oktober 2005 Matrikelnummer: Nachname: Vorname: Semesteranzahl: Die Klausur besteht aus drei Frageblöcken zu den Inhalten der

Mehr

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen Programmieren 10. Tutorium 4./ 5. Übungsblatt Inhalt I. Übungsblatt 4 II. III. - Rückgabe und Besprechung - Vorbereitung auf Wiederholung/ Nachtrag - Operatorpräzedenzen IV. Übungsblatt 5 - Vorstellung

Mehr

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

1 topologisches Sortieren

1 topologisches Sortieren Wolfgang Hönig / Andreas Ecke WS 09/0 topologisches Sortieren. Überblick. Solange noch Knoten vorhanden: a) Suche Knoten v, zu dem keine Kante führt (Falls nicht vorhanden keine topologische Sortierung

Mehr

Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Prof. Dr. Uwe Schmidt 21. August 2007 Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Zeit: 75 Minuten erlaubte Hilfsmittel: keine Bitte tragen Sie Ihre Antworten und fertigen

Mehr

Tapps mit XP-Mode unter Windows 7 64 bit (V2.0)

Tapps mit XP-Mode unter Windows 7 64 bit (V2.0) Tapps mit XP-Mode unter Windows 7 64 bit (V2.0) 1 Einleitung... 2 2 Download und Installation... 3 2.1 Installation von WindowsXPMode_de-de.exe... 4 2.2 Installation von Windows6.1-KB958559-x64.msu...

Mehr

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

Einfache und effiziente Zusammenarbeit in der Cloud. EASY-PM Office Add-Ins Handbuch

Einfache und effiziente Zusammenarbeit in der Cloud. EASY-PM Office Add-Ins Handbuch Einfache und effiziente Zusammenarbeit in der Cloud EASY-PM Office Add-Ins Handbuch Inhaltsverzeichnis 1. Einführung... 3 2. Ribbonmenü... 4 3. Dokument... 5 3.1 Öffnen... 5 3.2 Speichern... 6 3.3 Speichern

Mehr

SEQUENZDIAGRAMM. Christoph Süsens

SEQUENZDIAGRAMM. Christoph Süsens SEQUENZDIAGRAMM Christoph Süsens DEFINITION Das Sequenzdiagramm gibt Auskunft darüber: Welche Methoden für die Kommunikation zwischen ausgewählten Objekten zuständig sind. Wie der zeitliche Ablauf von

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Name, Vorname Matrikelnummer Probeklausur zur Vorlesung Einführung in die Programmierung WS 2008/09 Dauer: 2 Stunden Hinweise: Schreiben Sie Ihren Namen und Ihre Matrikelnummer auf dieses Deckblatt und

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

Betriebssysteme. Dipl.-Ing.(FH) Volker Schepper

Betriebssysteme. Dipl.-Ing.(FH) Volker Schepper 1. Der Prozess beginnt im Zustand Erzeugt, nachdem sein Vaterprozess den Systemaufruf fork() (s.u.) abgesetzt hat. In diesem Zustand wird der Prozess-Kontext initialisiert. 2. Ist diese Aufbauphase abgeschlossen,

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

Design by Contract with JML

Design by Contract with JML Thema: Design by Contract with JML Proseminar: Assertions Verfasser: Literatur: Betreuer: Natalya Moriz Gary T.Leavens and Yoonsik Cheon: Design by Contract with JML Prof. Dr. Heike Wehrheim 1 Inhalt DBC

Mehr

Computeranwendung und Programmierung (CuP)

Computeranwendung und Programmierung (CuP) Computeranwendung und Programmierung (CuP) VO: Peter Auer (Informationstechnologie) UE: Norbert Seifter (Angewandet Mathematik) Organisatorisches (Vorlesung) Vorlesungszeiten Montag 11:15 12:45 Freitag

Mehr

Native Zeichenketten (C-Strings)

Native Zeichenketten (C-Strings) Native Zeichenketten (C-Strings)... sind in C/C++ char-arrays. D.h. die Deklaration char msg[80]; kann Zeichenketten bis zur Länge 79 enthalten. (Direkte Zuweisungen wie msg="hallo!" sind jedoch nicht

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

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

Threads. Foliensatz 8: Threads Folie 1. Hans-Georg Eßer, TH Nürnberg Systemprogrammierung, Sommersemester 2015

Threads. Foliensatz 8: Threads Folie 1. Hans-Georg Eßer, TH Nürnberg Systemprogrammierung, Sommersemester 2015 Sep 19 14:20:18 amd64 sshd[20494]: Accepted rsa for esser from ::ffff:87.234.201.207 port 61557 Sep 19 14:27:41 amd64 syslog-ng[7653]: STATS: dropped 0 Sep 20 01:00:01 amd64 /usr/sbin/cron[29278]: (root)

Mehr

2A Basistechniken: Weitere Aufgaben

2A Basistechniken: Weitere Aufgaben 2A Basistechniken: Weitere Aufgaben 2A.3 Programmierung unter UNIX/Linux 1. Gegeben sind einige Ausschnitte von C-Programmen, die unter UNIX/Linux ausgeführt werden sollen. Beantworten Sie die zugehörigen

Mehr

Algorithmen & Datenstrukturen 1. Klausur

Algorithmen & Datenstrukturen 1. Klausur Algorithmen & Datenstrukturen 1. Klausur 7. Juli 2010 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 35 2 30 3 30 4 15 5 40 6 30 Gesamt 180 1 Seite 2 von 14 Aufgabe 1) Programm Analyse

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

Client-Server-Beziehungen

Client-Server-Beziehungen Client-Server-Beziehungen Server bietet Dienste an, Client nutzt Dienste Objekt ist gleichzeitig Client und Server Vertrag zwischen Client und Server: Client erfüllt Vorbedingungen eines Dienstes Server

Mehr

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten

Mehr

Datensicherung. Beschreibung der Datensicherung

Datensicherung. Beschreibung der Datensicherung Datensicherung Mit dem Datensicherungsprogramm können Sie Ihre persönlichen Daten problemlos Sichern. Es ist möglich eine komplette Datensicherung durchzuführen, aber auch nur die neuen und geänderten

Mehr

Kapitel 4. Monitore und wechselseitiger Ausschluss

Kapitel 4. Monitore und wechselseitiger Ausschluss Seite 1 Kapitel 4 Monitore und wechselseitiger Ausschluss Prof. Dr. Rolf Hennicker 28.05.2015 4.1 Interferenzen Seite 2 Parallel ablaufende Prozesse können sich gegenseitig (störend) beeinflussen. Beispiel

Mehr

Alltagsnotizen eines Softwareentwicklers

Alltagsnotizen eines Softwareentwicklers Alltagsnotizen eines Softwareentwicklers Entkoppeln von Objekten durch Callbacks mit c++-interfaces oder boost.function und boost.bind Tags: c++, entkoppeln, objekt, oop, callback, boost.bind, boost.function,

Mehr

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind Templates und Containerklassen Ziel, Inhalt Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind Templates und Containerklassen 1 Ziel, Inhalt

Mehr

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7 Einrichtung des Cisco VPN Clients (IPSEC) in Windows7 Diese Verbindung muss einmalig eingerichtet werden und wird benötigt, um den Zugriff vom privaten Rechner oder der Workstation im Home Office über

Mehr

Bedienung von BlueJ. Klassenanzeige

Bedienung von BlueJ. Klassenanzeige Im Folgenden werden wichtige Funktionen für den Einsatz von BlueJ im Unterricht beschrieben. Hierbei wird auf den Umgang mit Projekten, Klassen und Objekten eingegangen. Abgeschlossen wird dieses Dokument

Mehr

Algorithmen mit Python

Algorithmen mit Python Algorithmen mit Python Vorbesprechung zum Proseminar im Sommersemester 2009 http://www.python.org 1 Sie lernen in DAP Java und C/C++: 80% Syntax, 20% Algorithmen-Design Idee Schon ein einfaches Hello World

Mehr

4D Server v12 64-bit Version BETA VERSION

4D Server v12 64-bit Version BETA VERSION 4D Server v12 64-bit Version BETA VERSION 4D Server v12 unterstützt jetzt das Windows 64-bit Betriebssystem. Hauptvorteil der 64-bit Technologie ist die rundum verbesserte Performance der Anwendungen und

Mehr

Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012

Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012 WS 2011/2012 Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012 Prof. Dr. Robert Lorenz Musterlösung zur Vorlesung Informatik I, Extrablatt zu komplexen Datenstrukturen Aufgabe 45 **

Mehr

mywms Vorlage Seite 1/5 mywms Datenhaltung von Haug Bürger

mywms Vorlage Seite 1/5 mywms Datenhaltung von Haug Bürger mywms Vorlage Seite 1/5 mywms Datenhaltung von Haug Bürger Grundlegendes Oracle9i PostgreSQL Prevayler Memory mywms bietet umfangreiche Konfigurationsmöglichkeiten um die Daten dauerhaft zu speichern.

Mehr

Bitte verwenden Sie nur dokumentenechtes Schreibmaterial!

Bitte verwenden Sie nur dokumentenechtes Schreibmaterial! VO 182.711 Prüfung Betriebssysteme 8. November 2013 KNr. MNr. Zuname, Vorname Ges.)(100) 1.)(35) 2.)(20) 3.)(45) Zusatzblätter: Bitte verwenden Sie nur dokumentenechtes Schreibmaterial! 1 Synchronisation

Mehr