Laden...

Methode gegen gleichzeitige Ausführung durch mehrere Threads schützen

Erstellt von Ploetzi vor 14 Jahren Letzter Beitrag vor 14 Jahren 726 Views
Ploetzi Themenstarter:in
313 Beiträge seit 2006
vor 14 Jahren
Methode gegen gleichzeitige Ausführung durch mehrere Threads schützen

Hallo,
folgendes Problem.
Ich habe mehrere Threads (Socketserver).

Nun sendet ein Client eine Anfrage und soll Daten von einer Hardwar abfragen. Die Hardware wurde in einer Klasse welche ein Singleton enthaelt initialisiert und der Thread ruft dann das SIngleton auf:

Hardware.getInstance().getmessage(string nachricht);

Nun wartet die getmessage bis daten ankommen, und sendet diese dann zurueck.

Wie kann ich sicherstellen, dass getmessage nciht parallel ein zweites mal aufgerufen wird, sodass unter umstaenden ein Socketclient die Falschen Daten erhaelt?

lg

Andreas

Gelöschter Account
vor 14 Jahren

schau dir mal das "lock" statement an....
siehe auch: [Artikel] Multi-Threaded Programmierung

Ploetzi Themenstarter:in
313 Beiträge seit 2006
vor 14 Jahren

nja, aber die hardware laeuft ja in keinem thread,...

Gelöschter Account
vor 14 Jahren

naja.. dann kann sie nicht parallel ein 2. mal aufgerufenwerden? oder geht es dir darum eine methode nur ein einziges mal abrufbar zu machen? dann kannst du das im singleton mit einem flag lösen, das du beim ersten aufruf setzt und dann immer überprüfst....

Ploetzi Themenstarter:in
313 Beiträge seit 2006
vor 14 Jahren

Das mit dem Flag mache ich gerade.

Aber bei 3 Clients oder so, hilft das nciht mehr,...da die Reihung nicht mehr gegeben ist.

Ein Beispiel mit Zeiten
10:03 Client 1 sendet Anfrage
10:04 Anfrage Client1 wird an Hardware gesendet
10:05 Client 1 erhaelt Antworten Beginn von Hardware
10:06 Client 2 sendet Anfrage
10:07 Client 1 erhaelt Antworten Ende von Hardware
10:08 Client 3 sendet Anfrage
10:09 Anfrage Client2 wird an Hardware gesendet
10:10 Client 2 erhaelt Antworten Beginn von Hardware
10:11 Client 2 erhaelt Antworten Ende von Hardware
10:12 Anfrage Client3 wird an Hardware gesendet
10:13 Client 1 erhaelt Antworten Beginn von Hardware
10:14 Client 1 erhaelt Antworten Ende von Hardware

Die hardware ist in einem Singleton dass von beiden Threads auch aufgerufen wird, dort ist eben die Methode zum nachrichten erhalten

Ploetzi Themenstarter:in
313 Beiträge seit 2006
vor 14 Jahren

aso du meinst,dass ein thread dann laufend abfragt ob er darf?

Gelöschter Account
vor 14 Jahren

stop!... vorhin hast du gesagt, das du kein threading hast... jetzt hast du doch threading.. also passt mein hinweis vom anfang exakt auf deine problemstellung.

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo Ploetzi,

nja, aber die hardware laeuft ja in keinem thread,...

völlig irrelevanter Einwand. Es geht darum, dass mehrere Threads nicht gleichzeitig auf die Methode zugreifen. Was die Methode macht, spielt keine Rolle.

aso du meinst,dass ein thread dann laufend abfragt ob er darf?

Nein, meint er nicht.

Die erste Antwort beantwortet deine Frage. Guck dir das in Ruhe an.

herbivore