Threads & Mutexe [gelöst]
Übersicht

![]() |
ThunderBetreff: Threads & Mutexe [gelöst] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich hätte zwei Fragen zu Threads und hoffe, man kann mir helfen ![]() 1. Frage: ist eher theoretisch. Verstehe ich es richtig, dass ein Mutex, wenn er von einem Thread gesperrt wird, den Zugriff auf alle globale Variablen für die anderen Threads verriegelt und nur den einen Thread darauf zugreifen lässt? Wenn ja, wäre es nicht sinnvoll mehrere Mutexe zu erstellen, oder? (wie gesagt, nur eine Verständnisfrage) 2. Frage: hat mit einem kleinen Test, einen Multithreading-Server zu bauen, zu tun. Ich habe jetzt zwei Threads. Der erste hält Ausschau nach neuen Verbindungen (Thread A), der zweite macht das, was der Server sonst so macht (Thread B). Thread A sammelt also Verbindungen in einem Array und unterbricht z.B. im 4-Sekunden-Takt (damit der Server nicht so leicht überlastet werden kann) Thread B, um ihm die neuen Verbindungen zu übergeben (über Mutexlock). Die Frage ist jetzt: Wie kann Thread B (ohne Polling und am besten auch ohne plattformabhängige IPC) erfahren, dass Thread A ihn unterbrechen will, um ihm die neue Liste zu geben? Und (Frage 2.1): An die Netzwerkspezialisten: Ist so eine Unterteilung (Thread A, Thread B - wie ich schrieb) sinnvoll? Freue mich auf Antworten ![]() mfg Thunder |
||
- Zuletzt bearbeitet von Thunder am Fr, Feb 10, 2012 23:38, insgesamt einmal bearbeitet
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei Webservern ist es nicht unüblich gleich einen ganzen Thread-Pool zu beschäftigen, für jede Anfrage einen Thread. Dann hast Du sozusagen soviele AB-Threads, wie Anfragen, die, wenn nicht gebraucht, idle sind, aber erst nach einem bestimmten Timeout beendet werden.
Edit: Also so wie dein Konzept jetzt ist, muss nicht B unterbrochen werden, damit A ihm die Daten geben kann, sondern A muss sich unterbrechen (bzw. seinen Monitor abgeben), damit B sich die Daten holen kann. Sieh dir mal die Semaphores an, ich glaube, die sind genau dafür da. |
||
Starfare: Worklog, Website (download) |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, danke dir ![]() Thread A hat die Hauptfunktion des Servers und öffnet für jede Anfrage einen Thread (der die Verbindung herstellt, initialisiert etc.). Thread A ruft auch zweimal pro Sekunde eine Funktion auf, die alle Threads durchläuft und schaut, ob sie fertig sind. Wenn ja, wird die neue Instanz von TConnection (eine Klasse von mir, die die Verbindung definiert) per WaitThread an Thread A weitergegeben, der sie in die Liste reinschreibt - also habe ich Semaphores umgangen, weil ich nicht gewusst habe, wie die damit zusammenhängen. D.h. Frage 2 ist geklärt. |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es macht schon Sinn, mehrere Mutexes zu erstellen:
Es wird nämlich nicht der Zugriff auf die globalen Variablen sondern die Lock-Operation auf den Mutex gesperrt. Der zweite Aufruf blockiert dann so lange, bis das Mutex wieder entsperrt wird. Wenn du also Variablen sichern möchtest, musst du jeden Zugriff darauf mit mutex.Lock() und mutex.Unlock() umschließen. (Du kannst natürlich auch mehrere Zugriffe in einen Block packen.) MfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Perfekt. Die Erklärung hat ein Lichtlein in meinem Kopf aufgehen lassen ![]() Danke dir auch, jetzt versteh' ich's. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group