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(); } } } } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!