コード例 #1
0
        private static void Printer(string Message)
        {
            ThreadTests.CheckThread();

            for (var i = 0; i < 20; i++)
            {
                lock (_SyncRoot)
                //lock (_Messages)
                {
                    Console.Write("id:{0} ", Thread.CurrentThread.ManagedThreadId);
                    Console.Write("- msg({0}) ", i);
                    Console.WriteLine("\"{0}\"", Message);
                    _Messages.Add(Message);
                }
                Thread.Sleep(100);

                //try
                //{
                //    Monitor.Enter(_SyncRoot);

                //    Console.Write("id:{0} ", Thread.CurrentThread.ManagedThreadId);
                //    Console.Write("- msg({0}) ", i);
                //    Console.WriteLine("\"{0}\"", Message);
                //    _Messages.Add(Message);
                //}
                //finally
                //{
                //    if (Monitor.IsEntered(_SyncRoot))
                //        Monitor.Exit(_SyncRoot);
                //}
                //Thread.Sleep(100);
            }
            Console.WriteLine("Поток {0} завершен", Thread.CurrentThread.ManagedThreadId);
        }
コード例 #2
0
        private static readonly object _SyncRoot = new object();//4 байта памяти - главной сделать на чтение - и используем для группировки кода с т.зр. закрытост для прерывания разными потоками

        private static void ProcessMessage(string mesage)
        {
            ThreadTests.CheckThread();
            for (int i = 0; i < 3; i++)
            {
                lock (_SyncRoot)
                {
                    Write($"id: {Thread.CurrentThread.ManagedThreadId}");
                    Write($" msg{i}: ");
                    WriteLine($" \"{mesage}\"");
                }
                Thread.Sleep(100);
            }
            WriteLine("Finished");
        }
コード例 #3
0
        private static void ProcessMessage(string Message)
        {
            ThreadTests.CheckThread();

            for (var i = 0; i < 3; i++)
            {
                lock (_SyncRoot)
                {
                    Console.Write("id:{0} ", Thread.CurrentThread.ManagedThreadId);
                    Console.Write("- msg({0}) ", i);
                    Console.WriteLine("\"{0}\"", Message);
                }
                Thread.Sleep(1000);
            }
        }