Methodensperre in c #

8

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%     
Emanuele Mazzoni 20.02.2013, 10:07
quelle

4 Antworten

9

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.

    
Paolo Tedesco 20.02.2013, 10:09
quelle
9

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:

%Vor%     
Daniel Hilgarth 20.02.2013 10:09
quelle
7

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%     
Coral Doe 20.02.2013 10:13
quelle
3

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.

    
Davin Tryon 20.02.2013 10:08
quelle