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

  • 相关阅读:
    物喻十例
    小写金额转换成大写
    让电脑启动更快十招
    计算机技术
    DOS 全集
    python基础 day14 匿名函数 内置函数 闭包
    python基础 day13 生成器,列表推导式、生成器表达式
    python基础 day12 函数名的应用 新特性:格式化输出 f-string 迭代器
    python基础 day 11 函数参数
    python基础 day 10 函数初识
  • 原文地址:https://www.cnblogs.com/pu369/p/12372242.html
Copyright © 2011-2022 走看看