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

  • 相关阅读:
    【Demo 0011】多媒体播放器
    【Demo 0010】事件响应链
    【Demo 0009】表视图控制器
    【Demo 0008】标签控制器
    【Demo 0007】导航控制器
    【Demo 0006】iOS常用控件
    【Demo 0005】视图控制器
    【Demo 0004】屏幕、窗体及视图基础知识
    2019.7.16考试反思
    内网 可怜与超市题解 树形dp+合并
  • 原文地址:https://www.cnblogs.com/pu369/p/12372242.html
Copyright © 2011-2022 走看看