using System;
using System.Threading.Tasks;
using System.Threading;
public class Program
{
public static void Main()
var shared = 0;
var lck = new object();
//Write thread
Task.Run(()=>{
while(true){
lock(lck){
shared = shared + 1;
Monitor.PulseAll(lck);
}
Task.Delay(100);
});
//Read thread to check value 123
if(shared == 123){
DoSomething(shared);
break;
}else{
Monitor.Wait(lck);
//Read thread to check value 55
if(shared == 55){
Thread.Sleep(1000);
public static void DoSomething(int value){
Console.WriteLine("Value reached:" + value.ToString());