tutorial zu programmierung mit threads
-
Das sind keine Pseudothreads, das ist nur ne Wrapper-Klasse um die Threads der einzelnen Systeme.
-
Ach so,
dann ist das was anderes.Ich war davon ausgegangen dass die boost Threads keine "echten" Kernel Threads erstellen.MfG Spacelord
-
gut zu wissen...
hab noch das hier gefunden, scheint ganz brauchbar:
http://www.linuxjournal.com/article.php?sid=3184
-
da boost.threads leider noch nicht so einen großen funktionsumfang hat (wie auf den seiten auch zugegeben wird), poste ich mal die relevanten links für winapi threads:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/multiple_threads.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/creating_threads.asp
-
Wen du etwas ausführliches suchst kann ich dir nachfolgendes Buch empfehlen:
http://www.amazon.de/exec/obidos/ASIN/0201442345/qid=1097939260/br=3-1/br_lfncs__1/028-1363784-9752568
Ist zwar etwas älter stimmt inhaltlich aber immer noch, da sich die Konzept
seit NT nicht wesentlich geändert haben.Hi c.rackwitz,
den Link auf "creating threads" finde ich zweischneidig weil in den meisten
Fällen, wenn dein Programm nämlich das C-Laufzeitsystem benötigt, die Verwendung
von CreateThread() zu Fehlern führt.mfg JJ
-
was meinst du mit "C-Laufzeitsystem" und welche fehler können da auftreten?
-
hallo,
ganz einfach. Wenn Du in Deiner Threadfunktion z.B. strlen() verwendest, darfst Du nicht mit CreateThread arbeiten, sondern MUST _beginthread[ex] verwenden. Wenn Du hingegen in Deinem Thread nur ein WINAPI-Funktionen verwendest reicht CreateThread aus.
Wie das jetzt im einzelen zusammenhängt, wage ich nicht zu nennen, aber z.B.
kannst Durow = strtok(pString, '\r\n');
while(row) {
...
row=strtok(NULL, '\r\n');
}verwenden. strtok ist aber nicht Threadsave, pString muß in der C-Runtime global gespeichert, sonst würde der Aufruf in der Schleife nicht funktionieren mit NULL.
und diese globale variable in der pString gespeichert ist ist nicht durch eine CriticalSection geschützt.
Wenn Du obige schleife in 2 Threads einsetzt, ist das Ergebniss der Schleifen
nicht definiert so zu sagen.Außerdem muß auch die MultiThread-Version der C-Runtime gelinkt werden, und diese Stellt ebend _beginthread[ex] zur Vefügung.
strtok_r ist wohl die Mutithread-Version von strtok.
Evtl. ruft ja _beginthread[ex] später auch CreatThread auf, aber erstmal kann die C-Runtime "initalisiert" werden.
MfG
RB
-
RED-BARON hat das "bekannteste" Beispiel angeführt, strtok() wird im allgemeinen
mehrfach hintereinander aufgerufen und da die Funktion nicht threadsafe ist geht
der "Merker" verloren. Auch die Variable errno, in der Fehler abgespeichert
werden, funktioniert nicht und einiges andere wohl auch nicht mehr.
In dem angegebenen Buch oder auch bei Jeffrey Richter wird genaueres erklärt.
mfg JJ
-
was du mit c-runtime konkret meinst, hab ich immer noch nicht gelesen.
mit den ganzen mutexes und critical sections und was es noch gibt, will ich nicht einsteigen.
kennst du ein tutorial, mit dem ich in die win32 threading programmierung einsteigen kann? also z.b. 2 gleiche threads starten, die 1000 mal "." oder "|" in die konsole schreiben. sowas ist anschaulich und erschlägt einen nicht gleich.ich compiliere übrigens mit g++, nicht mit vc++ oder builder.
-
Das Laufzeitsystem steckt bei VC in msvcrt.dll, Laufzeitsysteme existieren jedoch für jeden Compiler. Weil das Laufzeitsystem all jene Funktionen enthält die der C-Standard vorschreibt (strtok(),...) und daher OS-unabhängig mit jedem Compiler mitgeliefert werden (müssen).
Es fällt mir schwer dich zu entäuschen, auch wenn man mit "wenigen" Zeilen eine Thread erstellen und starten kann, so ist doch sowohl die richtige Verwendung(!!) als auch Implementierung von multithreaded Anwendungen keine leichte Übung.mfg JJ
-
war mir klar, dass vc++ ne runtime braucht. hab ich schon öfters in fehlermeldungen gesehen. die gcc verwendet keine solche runtimes.
is mir klar, dass threading was komplexes ist. allerdings will ich nicht in kapitel 1 von mutexes hören. ich will mit den grundlagen anfangen.
hast du ein tutorial? für ein buch hab ich kein geld. ich finde auch nicht, dass mir als schüler das erlernen von winapi threading die 50 euro für ein buch wert sein muss.
gruß
-
Wie das mit gcc heisst weiss ich nicht, er hat garantiert was ähnliches. Auch mit VC kannst du das Laufzeitsystem statisch dazu Linken, dann ist das ganze auch "Unsichtbar".
Ein gutes Tutorial kennn ich leider nicht. Aber wenn sich jemand wie du in den "Tiefen" des Internet auskennt, dann lass dir sagen, man findet dort sogar das ein oder andere Fachbuch zum Download.
mfg JJ
-
alles klar. die downloads sind schon im "download manager"