public void Run() { while (true) { lock (ReaderWriter.LW){ var done = false; while (!done) { lock (ReaderWriter.LR){ if (ReaderWriter.ReadCount == 0) { ReaderWriter.Data = DateTime.Now.ToString(); Console.WriteLine($"Writer wrote {ReaderWriter.Data}"); done = true; } } try{ while (ReaderWriter.ReadCount != 0) { Console.WriteLine("Writer waiting..."); ReaderWriter.WaitLR(); } } catch (ThreadInterruptedException) { Console.WriteLine("ThreadInterruptedException in Writer wait"); } } var rand = new Random(); var secs = rand.Next(1, 5); Console.WriteLine($"Writer sleeping {secs} seconds..."); Thread.Sleep(secs * 1000); } } }