.


:




:

































 

 

 

 


, Monitor . TryEnter (), .




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(" ");

}

}

.





:


: 2016-12-03; !; : 361 |


:

:

, , .
==> ...

1576 - | 1248 -


© 2015-2024 lektsii.org - -

: 0.012 .