线程同步

同步代码区域的方法:Lock、Monitor、MethodImplAttribute

  class Program
    {
       static object o = new object();
        static void Main(string[] args)
        {

            Thread thread1 = new Thread(Test);
            thread1.Start();
            Thread thread2 = new Thread(Test);
            thread2.Start();

            Console.ReadLine();
        }

        //[MethodImpl(MethodImplOptions.Synchronized)]
        static void Test()
        {
            Thread.Sleep(2000);

            //使用Lock
            //lock(o)
            //{
            //    for (int i = 0; i < 20; i++)
            //    {
            //        Console.WriteLine(i);
            //    }
            //}

            //使用Monitor
            Monitor.Enter(o);
            for (int i = 0; i < 20; i++)
            {
                Console.WriteLine(i);
            }
            Monitor.Exit(o);
        }
    }

属于托管线程池的线程(即其 IsThreadPoolThread 属性为 true 的线程)是后台线程。 从非托管代码进入托管执行环境的所有线程都被标记为后台线程。 通过创建并启动新的 Thread 对象而生成的所有线程都默认为前台线程。

对某线程调用 Thread.Suspend 时,系统会注意到已经请求了线程挂起,并且会让该线程执行到一个安全点,然后才实际挂起该线程。 线程的安全点是线程执行过程中可执行垃圾回收的一个点。

为了执行垃圾回收,运行时必须挂起除正在执行回收的线程以外的所有线程。 每个线程在可以挂起之前都必须置于安全点。

posted @ 2015-05-07 22:44  senki  阅读(122)  评论(0编辑  收藏  举报