コード例 #1
0
ファイル: Parallel.cs プロジェクト: alexpetroch/Playground
        static void doStuff(SimpleReaderWriterLock rw, int sleep, bool write)
        {
            for (int i = 0; i < 100; i++)
            {
                if (write)
                {
                    rw.EnterWriteLock();
                    shared++;
                }
                else
                {
                    rw.EnterReadLock();
                    int value = shared;
                }

                Thread.Sleep(sleep);

                if (write)
                {
                    rw.ExitWriteLock();
                }
                else
                {
                    rw.ExitReadLock();
                }
            }
        }
コード例 #2
0
ファイル: Parallel.cs プロジェクト: alexpetroch/Playground
        public static void ReaderWriterLock()
        {
            var  rw    = new SimpleReaderWriterLock();
            Task task1 = Task.Run(() => doStuff(rw, 240, false));
            Task task2 = Task.Run(() => doStuff(rw, 150, false));
            Task task3 = Task.Run(() => doStuff(rw, 200, true));
            Task task4 = Task.Run(() => doStuff(rw, 180, false));
            Task task5 = Task.Run(() => doStuff(rw, 80, false));
            Task task6 = Task.Run(() => doStuff(rw, 50, true));

            Task.WaitAll(task1, task2, task3, task4, task5, task6);
            Assert.That(shared == 200);
        }