Exemple #1
0
        public static void ReaderUpdateToWriterTest()
        {
            RwLockTest obj = new RwLockTest();
            Thread     t   = new Thread(obj.ReaderUpdateToWriter);

            t.Start();
        }
Exemple #2
0
        public static void WriterReenlockTest()
        {
            RwLockTest obj = new RwLockTest();

            for (int i = 0; i < 3; i++)
            {
                Thread t = new Thread(obj.WriterReenlock);
                t.Name = i + "-";
                t.Start();

                t      = new Thread(obj.Reader);
                t.Name = i + "-reader-";
                t.Start();
            }
        }
Exemple #3
0
        public static void WriterRequestForReaderTest()
        {
            RwLockTest obj = new RwLockTest();

            for (int i = 0; i < 3; i++)
            {
                /*写降级为读*/
                Thread t = new Thread(obj.WriterRequestForReader);
                t.Name = i + "-";
                t.Start();
                /*读和读重入*/
                t      = new Thread(obj.Reader);
                t.Name = i + "-pure_reader-";
                t.Start();
            }
        }
Exemple #4
0
        /*
         * 读者和写者的测试,包括了读锁的可重入测试。
         * 测试方法:
         *      Writer 和 Reader 两个函数每隔50ms交替调用一次, 在Reader里面测试读锁的重入
         * 输出:
         *      先进行三个Writer操作,切三个Writer是按照顺序进行写。
         *      Reader操作和重入的Reader操作是并发执行的,可以看到Reader的序号是交替的。
         * **/
        public static void ReaderAndWriterTest()
        {
            RwLockTest obj = new RwLockTest();
            Thread     t;

            for (int i = 0; i < 6; i++)
            {
                bool readOrWrite = 0 == i % 2;
                t      = readOrWrite ? new Thread(obj.Writer) : new Thread(obj.Reader);
                t.Name = readOrWrite ? i / 2 + "-Writer " : (i / 2) + "-Reader";
                if (readOrWrite)
                {
                    t.Start(i % 2);
                }
                else
                {
                    t.Start();
                }
                Thread.Sleep(50);
            }
        }