A RBEITEN MIT T HREADS. P ROZESSE UND T HREADS Prozess Eine einzelne CPU kann immer nur einen einzelnen Prozess bearbeiten. Rechenzeit wird an Prozesse.

Slides:



Advertisements
Ähnliche Präsentationen
Datenbankzugriff über ISAPI-Webservererweiterungen
Advertisements

Funktionen, Felder und Parameter-übergabe
Fragen 2 Werden die Funktionen des Betriebssystemkernes wie normale Funktionen aufgerufen? Einf. In die WI, DV-Infrastruktur WS 03/04.
Informatik 12 | DAES Compilerbau Wintersemester 2010 / 2011 Dr. Heiko Falk Technische Universität Dortmund Lehrstuhl Informatik 12 Entwurfsautomatisierung.
1 Was ist ein klassischer Prozess? A eine exe-Datei B log. Adressraum, Ablaufumgebung für genau einen Thread C log. Adressraum, Ablaufumgebung für eine.
1 Spezielle Packages des Java SDK (1.4) java.nio.
6. Der OpenMP Standard Direktiven-basiertes API zur Programmierung von Parallelrechnern mit gemeinsamem Speicher für FORTRAN, C und C++
3. Kapitel: Komplexität und Komplexitätsklassen
Semaphore void Passieren (semaphore &s) { if (s > 0) { s--;
Aufgaben zum Scheduling
Systeme 1 Kapitel 5.1 Unix Scheduling WS 2009/101.
Ausnahmen HS Merseburg (FH) WS 06/07.
Threads Richard Göbel.
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
Kapitel 10 Nebenläufigkeit und wechselseitiger Ausschluss
Betriebssysteme für mobile Endgeräte
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
Dynamischer Speicher. Ein Vergleich aus dem täglichen Leben...
FOR Anweisung.
XINDICE The Apache XML Project Name: Jacqueline Langhorst
OpenMP Präsentation im Rahmen des Seminars
Einführung Definitionen
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 3 Claudio Moraga, Gisbert Dittrich FBI Unido
Programmieren mit JAVA
Medizinische Statistik und Informationsverarbeitung Goldschmidt, Quade, Baur Institut für Medizinische Statistik, Dokumentation und Datenverarbeitung.
Vorlesung, Wintersemester 2009/10M. Schölzel 1 Optimierungstechniken in modernen Compilern Optimierungstechniken für SMP- Architekturen.
Vortrag III Hier in der Vorlesungszeit! Anwesenheitspflicht Jede Gruppe hat 6 Minuten! Stellt eure GUI vor –was ihr besonderes gemacht habt –Spektakuläre.
OpenGL mit Delphi Allgemeines OpenGL-Funktionsbezeichnungen
Arrays,Strings&Pointer in C/C++
Einführung in die Programmierung Datensammlung
Das Roboterprojekt Einführung Der erste Entwurf Das Thread-Konzept Hindernisse Website.
1 Nutzen Sie diese Powerpoint-Präsentation beim Selbstlernen oder in Veranstaltungen zur Einführung in das jeweilige Thema. Einführung Lernmodul Nutzungsbedingungen:
Multitasking im Betriebssystem
Prof. Dr. Gerhard Schmidt pres. by H.-J. Steffens Software Engineering SS 2009Folie 1 Objektmodellierung Objekte und Klassen Ein Objekt ist ein Exemplar.
Informatik I for D-MAVT
Clustered Neuronal Network A C#.NET project for Compute Cluster Server 2003.
Clustered Neuronal Network A C#.NET project for Compute Cluster Server 2003.
ERSTE SCHRITTE INS INTERNET
Systeme 1 Kapitel 4 Prozesse WS 2009/10.
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.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Die Zählschleife int s = 0 for (int k=1; k
Parallel Programming Parallel Matrix Multiplication
Informatik 1 Übung 7.
Die Grundidee Funktionsaufruf Funktionsname (Kopf) Code der Funktion
Betriebssysteme Übung Tutorium „System Calls & Multipgrogramming“
Arrays / Felder Themen: Arrays / Felder / Vektoren Was soll das eigentlich? Erstellen von Arrays Arrays auslesen. Wie sie verwaltet werden.
SYSTEMFORSCHUNG TECHNIK-WIRTSCHAFT-UMWELT Szenarien Variantenuntersuchungen.
Systemsoftware und Betriebssysteme
Seminar aus Softwareentwicklung
Vorlesung 5. #include double fv(double x) { return sin(x); } int main(){ int i,N=10; double a=1,b=2,del,x,sum,f,integral; for(i=1,sum=0.0,del = (b-a)/N;i
Parallelisierung für Multiprozessor-Maschinen
Java Thread Scheduling Jin Zhou Proseminar Java Thread Scheduling November 2000.
Gruppe 2 MEMORY MANAGEMENT Jakob Dietschy Arnold Huber
Grundlagen, Prinzipien und Aufgaben eines Betriebssystems
Autor: Timo Pagel Nutzung: Diese Lernkarten sind für die Nutzung mit OpenCards gedacht Siehe dazu
1. Charakteranimation 2. PlugIns schreiben und laden Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung WS 2010/2011.
Software Engineering SS04 Paralleles Programmieren FH Aachen, Prof. Dr.-Ing. Michael Trautwein Andrej Kühnal, Perez-Otuno Rodrigo.
Sammlungsklassen Array.
2.3 Implementierung von Prozessen
Java Programme nur ein bisschen objektorientiert.
Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Threads Alexander Sczyrba Jan Krüger.
Google App Engine - Technische Stärken und Schwächen
Nksainf.ch/oinf.
Einführung Definitionen
Einführung Definitionen
 Präsentation transkript:

A RBEITEN MIT T HREADS

P ROZESSE UND T HREADS Prozess Eine einzelne CPU kann immer nur einen einzelnen Prozess bearbeiten. Rechenzeit wird an Prozesse vom Betriebssystem vergeben, auf Basis ihrer Priorität. (Scheduling) Thread Threads sind Teile eines Prozesses. Ein Prozess kann eine beliebige Anzahl Threads enthalten. Im Gegensatz zu Prozessen können Threads Speicher teilen.

P ROZESSE UND T HREADS 2

T HREADS IN DER S PIELEPROGRAMMIERUNG Threads werden grundsätzlich dann benutzt wenn mehrere Dinge gleichzeitig passieren sollen. Threads ermöglichen das Laden von Ressourcen im Laufenden Spielbetrieb

D IE T HREAD -F UNKTION Die Thread-Funktion ist mit der Main-Funktion vergleichbar Unter Windows ist der Typ der Thread Funktion DWORD WINAPI mit einen erwarteten LPVOID Parameter.

D IE T HREAD -F UNKTION (C ODE ) DWORD WINAPI Thread1(LPVOID pParameter) //Bsp.-Thread 1 { for(int i = 0; <= 10000; i++) printf( Thread 1 sagt: %d\n, i); // anzeigen // Thread beenden. Der Rückgabewert gibt normalerweise Aufschluss darüber, ob ein Fehler auftrat. 0 steht für Alles OK. return 0; } DWORD WINAPI Thread2(LPVOID pParameter) //Bsp.-Thread 2 { for(int i = 0; <= 10000; i++) printf( Thread 1 sagt: %d\n, i); return 0; }

E RZEUGUNG EINES T HREADS ParameterBeschreibung LPSECURITY_ATTRIBUTES Lp ThreadAttributes Hier: Nicht weiter wichtig. Wird mit NULL angegeben. SIZE_T dwStackSize Legt die Stackgröße für den Thread fest. Bei NULL wird die Standartgröße verwendet. LPTHREAD_START_ROUTINE lpStart Hier wird die Thread-Funktion angegeben. Der Parameter ist ein Pointer auf eine Funktion vom Typ DWORD WINAPI LPVOID lpParamter Der hier verwendete Wert wird an die Thread- Funktion übergeben. NULL ist zulässig. DWORD dwCreationFlags Ermöglicht es den Thread direkt zu starten ( NULL) oder erst durch den Aufruf durch eine andere Funktion ( CREATE_SUSPENDED ) LPWORD lpThreadId Pointer auf einen DWORD -Wert der die ID des Threads erhält. Sollte aufgrund von Problemen mit Windows 95/98/Me auch dann nicht NULL sein wenn keine ID benötigt wird. Funktion CreateThread wird in der Win-API zur Verfügung gestellt. Die Funktion besitzt die folgenden Parameter:

E RZEUGUNG EINES T HREADS (CODE) HANDLE ist ein Rückgabewert der den Handle des erstellten Threads ausgibt, durch den dieser eindeutig zu Identifizieren ist. Sozusagen der Name des Threads. HANDLE hThread1, hThread 2; DWORD dwThread1, dwThread2; //Zwei Threads Erzeugen hThread1 = (CreateThread(NULL, 0, Thread1, NULL, 0, &dwThread1); hThread2 = (CreateThread(NULL, 0, Thread2, NULL, 0, &dwThread2);

V ERWALTUNGSFUNKTIONEN VON T HREADS Mögliche Operationen sind: Thread beenden Threads anhalten und fortsetzen Threads schlafen legen Setzen der Thread Priorität: THREAD_PRIORITY_TIME_CRITICAL THREAD_PRIORITY_HIGHEST THREAD_PRIORITY_ABOVE_NORMAL THREAD_PRIORITY_NORMAL THREAD_PRIORITY_BELOW_NORMAL THREAD_PRIORITY_LOWEST THREAD_PRIORITY_IDLE

P ROBLEM : T HREAD -S YNCHRONISIERUNG Während es gegenüber Prozessen für Threads möglich ist auf den gleichen Speicherbereich zuzugreifen bringt dieser Vorteil auch die ein oder andere Gefahr mit sich. Zumeist wird so programmiert, dass Threads auf Signale anderer Threads, in denen diese ihren Status mitteilen, warten müssen. Probleme wie das folgende Beispiel werden dadurch alleine jedoch nicht behoben.

L ÖSUNG : C RITICAL S ECTIONS Eine Critical-Section ist eine Art Schutzkapsel um kritische Daten. Vgl. pPlayer Die Critical-Section wird im Hauptprogramm als Variable vom Typ CRITICAL_SECTION mit der Funktion InitializeCriticalSection erstellt. Um nun Daten innerhalb einer Critical Section verändern zu können muss ein Thread die EnterCriticalSection Funktion aufrufen. Wenn der Thread fertig ist muss er die LeaveCriticalSection Funktion aufrufen. Ruft ein Thread nun eine Critical Section auf, die bereits von einem anderen Thread verändert wird. Muss der Prozess warten und wird bis die Critical Section wieder frei ist vom Betriebssystem schlafen gelegt. Mit DeleteCriticalSection wird eine Critical Section entfernt. LeaveCriticalSection(&CS);

E VENTS Events sind die erwähnten Signale, mit deren Hilfe Threads aufeinander abgestimmt werden können. Events bieten Möglichkeiten Rechenzeit zu sparen. Events werden mit CreateEvent erzeugt und durch eine HANDLE Variable beschrieben. CloseHandle löscht ein Event. WaitForSingleObject lässt einen Thread auf ein Eventsignal warten. Hierbei kann eine Zeit in ms spezifiert werden oder auch INFINITE gewählt werden.

E VENTS 2 ParameterBeschreibung LP_SECURITY_ATTRIBUTES lpEventAttributes Wie zuvor: Nicht wichtig -> NULL BOOL bManualReset Ermöglicht es das automatische Resetten von Events zu stoppen (true). Das Event muss dann mit ResetEvent von Hand zurückgesetzt werden. BOOL bIntitalState Gibt den ursprünglichen Status des Events an. True = das Event wurde signalisiert. False (default) = das Event wurde nicht signalisiert. LPCTSTR lpName