Ich habe eine Klasse mit diesen drei Methoden. Diese Klasse wird von vielen Threads verwendet. Ich möchte die Method1 warten, wenn Method2 und / oder Method3 in irgendwelchen Threads ausgeführt werden. Irgendwelche Vorschläge?
%Vor%Wenn ich richtig verstanden habe, brauchst du so etwas:
%Vor%Dadurch kann method3 ausgeführt werden, wenn Methode2 ausgeführt wird und umgekehrt, während Methode1 auf beide warten muss. Natürlich werden Methode 2 und 3 nicht ausgeführt, während 1 läuft.
Die aktuelle Implementierung Ihrer Sperre ist völlig nutzlos, da jeder Thread auf einem anderen Objekt gesperrt wird.
Das Sperren erfolgt normalerweise mit einem schreibgeschützten Feld, das nur einmal initialisiert wird.
So können Sie einfach mehrere Methoden sperren:
Ich würde vorschlagen, ein ReaderWriterLockSlim
( Ссылка )
Ähnlich wie Leseoperationen können Methode 2 und Methode 3 parallel auftreten, während Methode 1 (wie eine Schreiboperation) auf das Ende warten muss. Es ist nicht die reguläre Gleichzeitigkeit von Lesen / Schreiben, aber die Logik ist ähnlich.
%Vor%Wenn Sie Multi-Threading verwenden, muss% ce_de% für alle Threads zugänglich sein. Daher müssen Ihre Sperren in diesem Fall statisch sein, damit die statischen Methoden sie sehen können.
Ihr aktuelles Setup erstellt ein neues Sperrobjekt für jeden Thread. Daher jetzt Synchronisation bereitstellen.
Tags und Links .net c# multithreading thread-safety