2 Threads und globale Struktur
-
Hallo,
ich hab im moment ein kniffeliges Problem. Habe noch nie so recht mit Threadsynchronisation gearbeitet.
Habe folgendes Problem:
Es existiert eine globale Struktur die in der main() einmalig initialisiert wird.
Dann startet der 1 Thread. Dieser hat die Aufgabe, aus einem Socket Daten zu lesen, diese zu verarbeiten und dann, wenn die Struktur nicht benutzt wird, in diese hinein zu schreiben. Ansonsten soll er so lange warten bis die Struktur freigegeben wurde.
Währenddessen startet Thread 2 und LIEST(er schreibt NICHT hinein) immer aus der globalen Struktur und arbeitet dann mit den Daten in der Struktur. Dieser Thread soll aber NICHT aus der Struktur lesen, wenn Thread 1 gerade rein schreibt. Ansonsten soll er warten bis die Struktur freigegeben wurde.
Bin ich da mit Create-, ReleaseSemaphore() und WaitforSingleObject() dabei?
-
Lies einfach ein Tutorial ueber Threads und Synchronisation, um dich mit den Grundkonzepten vertraut zu machen. Prinzipiell bist du auf dem richtigen Weg ..
-
Im Prinzip gilt das, was Knivil bereits geschrieben hat.
Zusätzlich würde ich an Deiner Stelle statt einer Semaphore lieber Critical Section verwenden.
Ist wesentlich schlanker und ressourcenschonender als eine Semaphore.Desweiteren würde ich Dir beim Thema "Threads" raten, grundsätzlich die Win32-API Funktion CreateThread() zu vermeiden, wenn Du CRT-Funktionen verwendest, das erzeugt Leaks in der CRT. Oder einige CRT-Funktionen wie signal() funktionieren nicht korrekt. Verwende deshalb immer nur _beginthread() oder _beginthreadex().
Siehe auch Martin's Blog "CreateThread und die CRT" http://blog.m-ri.de/index.php/2007/11/28/createthread-und-die-crt/
Siehe auch Microsoft Systems Journal July 1999 "Q&A Win32 by Jeffrey Richter" http://www.microsoft.com/msj/0799/Win32/Win320799.aspxMartin