zoukankan      html  css  js  c++  java
  • C# Thread、lock

    lock结论:

    关于lock有下面几点需要注意的地方

    1、lock的是引用类型的对象,string类型除外。

    2、lock推荐的做法是使用静态的、只读的、私有的对象。

    3、保证lock的对象在外部无法修改才有意义,如果lock的对象在外部改变了,对其他线程就会畅通无阻,失去了lock的意义。

    另外没有unlock,在lock(){ }代码段后,会自动解锁

    class Program
        {
            private static readonly object obj = new object();
    
            static void Main(string[] args)
            {
                Thread th1 = new Thread(TestLock);
                Thread th2 = new Thread(TestLock1);
                th1.IsBackground = true;
                th2.IsBackground = true;
                th2.Start();
                th1.Start();
    
                #region 按任意键继续
    
                Console.Write("按任意键继续!");
                //此代码会提示用户按任意键,然后在用户按键前暂停程序。
                Console.ReadKey(true);
    
                #endregion 按任意键继续
            }
    
            private static void TestLock()
            {
                lock (obj)
                {
                    for (int i = 0; i < 10000; i++)
                    {
                        var message = i.ToString();
                        string logFileName = @"F:Log" + DateTime.Now.ToString("yyyyMMdd") + "Log" + ".txt";
                        StreamWriter sr = new StreamWriter(logFileName, true);
                        try
                        {
                            sr.WriteLine(message);
                        }
                        catch
                        {
                            Console.WriteLine(message);
                        }
                        finally
                        {
                            sr.Close();
                        }
                    }
                }
            }
    
            private static void TestLock1()
            {
                lock (obj)
                {
                    for (int i = 10000; i < 20000; i++)
                    {
                        var message = "Count:" + i.ToString();
                        string logFileName = @"F:Log" + DateTime.Now.ToString("yyyyMMdd") + "Log" + ".txt";
                        StreamWriter sr = new StreamWriter(logFileName, true);
                        try
                        {
                            sr.WriteLine(message);
                        }
                        catch
                        {
                            Console.WriteLine(message);
                        }
                        finally
                        {
                            sr.Close();
                        }
                    }
                }
            }
    
            
        }

    参考:https://www.cnblogs.com/gygtech/p/10070674.html

  • 相关阅读:
    个人冲刺计划一周天详细
    软件小创意
    电梯调度小程序。
    敏捷开发一些百科。
    求二维数组的子数组中的最大值!
    求整数数组中子数组最大的和值!
    单元测试我们应该注意什么!
    分析一个文档(英语文章)中各个词出现的频率,并打印频率最高的前10个。
    有感而发
    冲刺一TD美景美图
  • 原文地址:https://www.cnblogs.com/pu369/p/12372242.html
Copyright © 2011-2022 走看看