zoukankan      html  css  js  c++  java
  • C#多线程的用法4-线程间的协作lock快捷方式

    线程间协作还可通过lock(加锁)方式进行,lock属于C#的Monitor语法糖(Monitor后续讲解)。使用简单快捷,如下:

    /// <summary>
            /// 多线程协作-lock快捷方式
            /// 成功解决多线程对单一资源的共享
            /// </summary>
            private static void MultiThreadSynergicWithLock()
            {
                int[] array = new int[3];
    
                Thread producer = new Thread(() =>
                {
                    int count = 0;
                    Random random = new Random();
                    while (true)
                    {
                        if (10 == count)
                            break;
    
                        lock (array)
                        {
                            array[0] = random.Next(10);
                            array[1] = random.Next(10);
                            array[2] = random.Next(10);
                            count++;
                            Console.WriteLine(String.Format("{0} work count:{1}。{2}-{3}-{4}", Thread.CurrentThread.Name, count, array[0], array[1], array[2]));
                        }
                        Thread.Sleep(100);
                    }
                })
                {
                    Name = "producer"
                };
                Thread customer = new Thread(() =>
                {
                    //Console.WriteLine(String.Format("{0} start work", Thread.CurrentThread.Name));
                    int count = 0;
                    while (true)
                    {
                        if (10 == count)
                            break;
                        lock (array)
                        {
                            count++;
                            Console.WriteLine(String.Format("{0} work count:{1}。{2}-{3}-{4}", Thread.CurrentThread.Name, count, array[0], array[1], array[2]));
                            array[0] = 0;
                            array[1] = 0;
                            array[2] = 0;
                        }
                        Thread.Sleep(10);
                    }
                })
                {
                    Name = "customer"
                };
    
                producer.Start();
                customer.Start();
            }
    

    说明:

    1、通过lock成功解决了多个线程对同一资源的共享使用问题,确保一个线程在lock到资源后,另外需要资源的线程只能处于等待状态。

    2、lock并不能解决线程间顺序执行的问题(线程顺序执行是指:要求线程A,B满足,A先执行,B再执行,A又执行,B再次执行这种交替模式)

  • 相关阅读:
    Spark完成wordCount
    Spark介绍
    分库分表介绍
    rpc学习
    xgboost应用
    ElasticSearch 批量增加索引
    乡愁
    java futureTask的使用
    ElasticSearch 例子
    Matlab实现线性回归和逻辑回归: Linear Regression & Logistic Regression
  • 原文地址:https://www.cnblogs.com/dw039/p/7398729.html
Copyright © 2011-2022 走看看