Exemple #1
0
        public void CurrentReadCount_WhenInvokedInParallel_ShouldNotThrowLockingException(int totalOperations, int maxDegreeOfParallelism)
        {
            var readerWriterLockSlimOf = new ReaderWriterLockSlimOf <object>();

            var options = new ParallelOptions
            {
                MaxDegreeOfParallelism = maxDegreeOfParallelism,
            };

            var exceptions = new ConcurrentBag <Exception>();
            var result     = Parallel.For(0, totalOperations, options, state =>
            {
                try
                {
                    readerWriterLockSlimOf.Instance = state;

                    var i1 = readerWriterLockSlimOf.Instance;
                    var i2 = readerWriterLockSlimOf.Instance;
                    var i3 = readerWriterLockSlimOf.Instance;
                    var i4 = readerWriterLockSlimOf.Instance;
                    var i5 = readerWriterLockSlimOf.Instance;

                    var numReaders = readerWriterLockSlimOf.CurrentReadCount;

                    readerWriterLockSlimOf.Instance = state;

                    var i6  = readerWriterLockSlimOf.Instance;
                    var i7  = readerWriterLockSlimOf.Instance;
                    var i8  = readerWriterLockSlimOf.Instance;
                    var i9  = readerWriterLockSlimOf.Instance;
                    var i10 = readerWriterLockSlimOf.Instance;

                    readerWriterLockSlimOf.Instance = state;
                }
                catch (Exception exc)
                {
                    exceptions.Add(exc);
                }
            });

            Assert.Empty(exceptions);
            Assert.True(result.IsCompleted);
        }
Exemple #2
0
        public void ShouldNotThrowLockingException()
        {
            var x = new ReaderWriterLockSlimOf <object>();

            var options = new ParallelOptions
            {
                MaxDegreeOfParallelism = 25,
            };

            var result = Parallel.For(0, 1000 * 1000, options, state =>
            {
                x.Instance = state;
                var i1     = x.Instance;
                var i2     = x.Instance;
                var i3     = x.Instance;
                var i4     = x.Instance;
                var i5     = x.Instance;

                var numReaders = x.CurrentReadCount;
                if (numReaders > 1)
                {
                    Console.WriteLine($"Num Readers: {numReaders}");
                }

                x.Instance = state;

                var i6     = x.Instance;
                var i7     = x.Instance;
                var i8     = x.Instance;
                var i9     = x.Instance;
                var i10    = x.Instance;
                x.Instance = state;
            });

            Console.WriteLine(x.Instance);
            result.IsCompleted.Should().BeTrue();
        }