Example #1
0
        public void ReaderWriter_WhenDeadlocked_Throws()
        {
            ReaderWriterClass rw      = new ReaderWriterClass();
            Barrier           barrier = new Barrier(2);
            int i = 0;

            Action t1 = () => rw.Read(
                () =>
            {
                barrier.SignalAndWait();
                lock (rw)
                {
                    i = 1;
                }
            });

            Action t2 = () =>
            {
                lock (rw)
                {
                    barrier.SignalAndWait();
                    rw.Write(i, () => { });
                }
            };

            TestHelpers.InvokeSimultaneouslyAndWaitForDeadlockDetection(t1, t2);
        }
        public void ReaderWriter_WhenDeadlocked_Throws()
        {
            ReaderWriterClass rw = new ReaderWriterClass();
            Barrier barrier = new Barrier(2);
            int i = 0;

            Action t1 = () => rw.Read(
                () =>
                {
                    barrier.SignalAndWait();
                    lock (rw)
                    {
                        i = 1;
                    }
                });

            Action t2 = () =>
                            {
                                lock (rw)
                                {
                                    barrier.SignalAndWait();
                                    rw.Write(i, () => { });
                                }
                            };

            TestHelpers.InvokeSimultaneouslyAndWaitForDeadlockDetection(t1, t2);
        }