Example #1
0
        public void ReaderWriterAttribute_WhenDeadlocked_Throws()
        {
            ReaderWriterAttributeClass rw = new ReaderWriterAttributeClass();
            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 ObserverAndReadFromWriteMethod_DoesNotThrow()
        {
            ReaderWriterAttributeClass rw = new ReaderWriterAttributeClass();

            rw.Write(1, () =>
            {
                rw.Observe(() => { });
                rw.Read(() => { });
            });
        }
        public void WriteLockLockAcquiredFromReadMethod_DoesThrow()
        {
            ReaderWriterAttributeClass rw = new ReaderWriterAttributeClass();

            rw.Read(() => rw.Write(0, () => { }));
        }
        public void ReaderLockAcquiredFromUpgradeableMethod_DoesNotThrow()
        {
            ReaderWriterAttributeClass rw = new ReaderWriterAttributeClass();

            rw.UpgradeableRead(() => rw.Read(() => { }));
        }
        public void ReaderLockAcquiredFromWriterMethod_DoesNotThrow()
        {
            ReaderWriterAttributeClass rw = new ReaderWriterAttributeClass();

            rw.Write(0, () => rw.Read(() => { }));
        }
 public void WriteLockLockAcquiredFromReadMethod_DoesThrow()
 {
     ReaderWriterAttributeClass rw = new ReaderWriterAttributeClass();
     rw.Read(() => rw.Write(0, () => { }));
 }
 public void ReaderLockAcquiredFromWriterMethod_DoesNotThrow()
 {
     ReaderWriterAttributeClass rw = new ReaderWriterAttributeClass();
     rw.Write( 0, () => rw.Read( () => { } ) );
 }
 public void ReaderLockAcquiredFromUpgradeableMethod_DoesNotThrow()
 {
     ReaderWriterAttributeClass rw = new ReaderWriterAttributeClass();
     rw.UpgradeableRead(() => rw.Read(() => { }));
 }
 public void ObserverAndReadFromWriteMethod_DoesNotThrow()
 {
     ReaderWriterAttributeClass rw = new ReaderWriterAttributeClass();
     rw.Write(1, () =>
         {
             rw.Observe( () => { } );
             rw.Read( () => { } );
         } );
 }
        public void ReaderWriterAttribute_WhenDeadlocked_Throws()
        {
            ReaderWriterAttributeClass rw = new ReaderWriterAttributeClass();
            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);
        }