Esempio n. 1
0
            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);
                    }
                }
            }