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++; } } }


浙公网安备 33010602011771号