• 线程同步


    同步代码区域的方法: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 时,系统会注意到已经请求了线程挂起,并且会让该线程执行到一个安全点,然后才实际挂起该线程。 线程的安全点是线程执行过程中可执行垃圾回收的一个点。

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

  • 相关阅读:
    JVM 关于对象分配在堆、栈、TLAB的理解
    分布式唯一 ID 生成方案有哪些?
    JVM 栈帧之操作数栈与局部变量表 转
    C# TreeHelper帮助类
    Java:Top K问题的解法
    C#单例模式
    C#分组方式比较
    Vue实现登录
    git使用总结
    js实现无色彩球
  • 原文地址:https://www.cnblogs.com/goodlucklzq/p/4485669.html
Copyright © 2020-2023  润新知