Threads & Mutexe [gelöst]

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Thunder

Betreff: Threads & Mutexe [gelöst]

BeitragMi, Feb 08, 2012 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,


ich hätte zwei Fragen zu Threads und hoffe, man kann mir helfen Smile

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 Very Happy

mfg Thunder
  • Zuletzt bearbeitet von Thunder am Fr, Feb 10, 2012 23:38, insgesamt einmal bearbeitet

ZaP

BeitragMi, Feb 08, 2012 23:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Feb 09, 2012 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, danke dir Very Happy . Das Prinzip habe ich in etwa übernommen:
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

BeitragFr, Feb 10, 2012 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Feb 10, 2012 23:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Perfekt. Die Erklärung hat ein Lichtlein in meinem Kopf aufgehen lassen Very Happy
Danke dir auch, jetzt versteh' ich's.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group