public static bool TryEnter(object obj)
true, obj, false. . TryEnter () , .
, Monitor Wait (), Pulse () PulseAll (), .
Wait (), Pulse () PulseAll ()
. lock, R, . 7? , R, , . ,
. , . , , . C# Wait (), Pulse () PulseAll ().
Wait (), Pulse () PulseAll () Monitor . . , Wait (). , , . , , Pulse () PulseAll (). Pulse () , . PulseAll () .
Wait ().
public static bool Wait(object obj)
public static bool Wait(object obj, int _)
, , , _. obj , .
Pulse () PulseAll ():
public static void Pulse(object obj) public static void PulseAll(object obj)
obj .
Wait(),Pulse() nPulseAll() , , lock, SynchronizationLockException.
|
|
Wait () Pulse ()
Wait () Pulse (), , "" "". TickTock, : Tick () (). Tick () "", () "". : Tick (), (). , , "" "", "-", /
Using System;
Using System.Threading;
class TickTock {
object lockOn = new object (); public void Tick(bool running) { lock(lockOn) {
if(!running) { // Monitor.Pulse(lockOn); // return;
}
Console.Write(" ");
Monitor.Pulse(lockOn); // Tock() Monitor.Wait(lockOn); // Tock()
}
}
public void Tock(bool running) { lock(lockOn) {
if(!running) { //
Monitor.Pulse(lockOn); // return;
}
Console.WriteLine("");
Monitor.Pulse(lockOn); // Tick() Monitor.Wait(lockOn); // Tick()
}
}
}
class MyThread {
Public Thread Thrd;
TickTock ttOb;
// .
public MyThread(string name, TickTock tt) {
Thrd = new Thread(this.Run); ttOb = tt;
Thrd.Name = name;
Thrd.Start(); '
}
// , void Run() {
if(Thrd.Name == "Tick") {
for(int i=0; i<5; i++) ttOb.Tick(true); ttOb.Tick(false);
}
else {
for(int i=0; i<5; i++) ttOb.Tock(true); ttOb.Tock(false);
class TickingClock { static void Main() {
TickTock tt = new TickTock ();
MyThread mtl = new MyThread("Tick", tt);
MyThread mt2 = new MyThread("Tock", tt); mtl.Thrd.Join(); mt2.Thrd.Join();
Console.WriteLine(" ");
}
}
.