当前位置:网站首页>C# Monitor类
C# Monitor类
2022-08-02 20:02:00 【biyusr】
lock 语句由 C# 编译器解析为使用 Monitor 类。下面的 lock 语句:
lock (obj){// synchronized region for obj}
被解析为调用 Enter() 方法,该方法会一直等待,直到线程锁定对象为止。一次只有一个线程能锁定对象,只要解除了锁定。线程就可以进入同步阶段。Monitor 类的 Exit()方法解除了锁定。编译器把 Exit() 方法放在 try 块的 finally 处理程序中,所以如果抛出了异常,就会解除该锁定。
Monitor.Enter(obj);try{// synchronized region for obj}finally{Monitor.Exit(obj);}
与 C#的 lock 语句相比,Monitor 类的主要优点是:可以添加一个等待被锁定的超时值。这样就不会无限期地等待被锁定,而可以像下面的例子那样使用 TryEnter()方法,其中给它传递一个超时值,指定等待被锁定的最长时间。如果 obj 被锁定,TryEnter() 方法就把布尔型的引用参数设置为true,并同步地访问由对象 obj 锁定的状态。如果另一个线程锁定 obj 的时间超过了 500 毫秒,TryEnter() 方法就把变量 lockTaken 设置为 false,线程不再等待,而是用于执行其他操作。也许在以后,该线程会尝试再次获得锁定。
bool _lockTaken = false;Monitor.TryEnter(_obj, 500, ref _lockTaken);if (_lockTaken){try{// acquired the lock// synchronized region for obj}finally{Monitor.Exit(obj);}}else{// didn't get the lock, do something else}
边栏推荐
- 【LeetCode】1161. 最大层内元素和
- 【LeetCode】1374. 生成每种字符都是奇数个的字符串
- 【 LeetCode 】 1374. Generate each character string is an odd number
- Wintun:一款惊艳的 WireGuard 虚拟网卡接口驱动
- Fiddle设置接口数据用指定工具查看;Sublime Text设置json数据格式化转换
- 广东省数字经济发展指引 1.0之建成数据安全保障体系
- 基本语法(三)
- Golang source code analysis: time/rate
- A Review of Nature Microbiology: Focusing on the Algae--Ecological Interface of Phytoplankton-Bacteria Interactions
- Solve the docker mysql can't write Chinese
猜你喜欢
随机推荐
什么是乙二醇二乙酸酯(EGDA)?
分布式事务
【LeetCode】1374. 生成每种字符都是奇数个的字符串
美国爱荷华州立大学| Improving Distantly Supervised Relation Extraction by Natural Language Inference(通过自然语言推理改进远程监督关系提取)
ALV report learning summary
姑姑:给小学生出点口算题
B站HR对面试者声称其核心用户都是生活中的Loser
ABAP语法小复习
Thread线程类基本使用(下)
Kali命令ifconfig报错command not found
Fiddle设置接口数据用指定工具查看;Sublime Text设置json数据格式化转换
APP自动化uiautomator2获取toast
V - memo new instructions
7月29-31 | APACHECON ASIA 2022
腾讯云孟凡杰:我所经历的云原生降本增效最佳实践案例
你是几星测试/开发程序员?技术型选手王大拿......
顺序查找和折半查找,看这篇就够了
基本语法(三)
el-tree渲染大量数据的解决方案(不通过懒加载)
SQL 入门之第一讲——MySQL 8.0.29安装教程(windows 64位)









