Eine weitere sprachübergreifende Frage: Kann mir jemand sagen, welche C # Threading-Konstrukte den Java ReentrantLock- und Condition-Klassen am besten entsprechen? ReentrantLock verfügt über die Methoden lockInterruptibly () und unlock (), während Condition über die Methoden signal () und await () verfügt. Es ist diese Kombination, die ich gerne im C # -Code erhalten möchte - oder etwas Ähnliches ... Vielen Dank im Voraus.
Ich denke, wonach Sie suchen, ist die statische Monitor -Klasse . Ich erlaube Blockierung und nicht blockierende Mutex-Übernahme sowie Bedingung Variable Operationen. (Sie nennen sie Pulse , PulseAll und Warten Sie anstatt zu signalisieren und zu warten.
Die Klasse ReaderWriterLock wäre auch einen Blick wert. Dies ist vergleichbar mit ReentrantReadWriteLock in Java.
DISCLAIMER : Ich kenne diese Java-Klassen nicht, ich mache hier einen Stich in die Dunkelheit.
In C # haben Sie eine lock
-Anweisung (ich denke, das ist etwas wie %% pro_%% -Anweisung von Java), die für jedes Objekt sperren kann. Ich nehme an, diese Anweisung zu verwenden, oder synchronized
und Monitor.Enter(obj)
wäre ein bisschen wie ReentrantLock.
Es gibt zwei Klassen namens Monitor.Exit(obj)
und ManualResetEvent
. Diese Klassen haben eine AutoResetEvent
-Methode und eine Wait
-Methode, die wie das Condition-Signal aussieht und wartet. Der Unterschied zwischen diesen beiden Klassen ist, dass ein Set
gesetzt bleibt (niemand mehr blockiert) und muss ManualResetEvent
sein. Und Reset
wird - wie der Name schon sagt - automatisch zurückgesetzt.
Tags und Links java c# multithreading