c#基础知识篇-Monitor
作用
提供同步访问对象的机制,实现线程同步。
命名空间&程序集
- 命名空间:System.Threading
- 程序集:System.Threading.dll
属性
LockContentionCount | 获取尝试锁定监视器时出现争用的次数。 |
方法
|
注意事项
1. Enter和Exit是常用的两个方法,使用过程中须注意,为了防止获取锁之后因程序异常导致锁无法释放的情况,需要在try-catch之后的finally结构体中释放锁(Monitor.Exit())。
2. Monitor和TryEnter区别:TryEnter不会像Enter那样阻塞执行,如果线程成功进入关键区域会返回true
3. 为了避免死锁的发生,尽量用TryEnter(Object)或TryEnter()方法尝试获取一个对象上的显示锁。
代码
using System; using System.IO; using System.Threading; namespace MonitorDemo { public class Program { private static readonly object objlock = new object(); private static int number = 0; static void Main(string[] args) { string path = AppDomain.CurrentDomain.BaseDirectory + "\\monitor.txt"; File.WriteAllText(path, ""); for (int i = 0; i < 100; i++) { new Thread(m => { if (Monitor.TryEnter(objlock)) { try { WriteContent(path); } catch (Exception) { throw; } finally { Monitor.Exit(objlock); } } }).Start(); } } public static void WriteContent(string path) { string content = "编号 " + number + " : " + DateTime.Now.ToShortTimeString() + "\r\n"; File.AppendAllText(path, content); number++; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2022-07-09 生命周期、钩子函数