当前位置:网站首页>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}
边栏推荐
- OP analysis and design
- 训练双塔检索模型,可以不用query-doc样本了?明星机构联合发文
- arm64麒麟安装paddlehub(国产化)
- 有效解决MySQL报错:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO/YES)
- Thread线程类基本使用(下)
- Leetcode刷题——23. 合并K个升序链表
- js Fetch返回数据res.json()报错问题
- 特拉维夫大学 | Efficient Long-Text Understanding with Short-Text Models(使用短文本模型进行高效的长文本理解)
- 【 LeetCode 】 1374. Generate each character string is an odd number
- What is a Field Service Management System (FSM)?what is the benefit?
猜你喜欢

ShardingSphere-proxy +PostgreSQL实现读写分离(静态策略)

一款好用的FAQ搭建工具

扫码预约 | 观看Apache Linkis数据处理实践以及计算治理能力

In action: 10 ways to implement delayed tasks, with code!

遇上Mysql亿级优化,怎么办

Five data structures of Redis and their corresponding usage scenarios

GNN教程:图神经网络基础知识!

Electron User Guide Beginning Experience

Office2021 安装MathType

Three.js入门
随机推荐
Triacetin是什么化学材料
使用位运算实现加减乘除(+、-、*、/)及比较器的用法
ImageNet下载及处理
美国爱荷华州立大学| Improving Distantly Supervised Relation Extraction by Natural Language Inference(通过自然语言推理改进远程监督关系提取)
软考 ----- UML设计与分析(下)
J9数字论:互联网跨链桥有什么作用呢?
如何解决图像分类中的类别不均衡问题?不妨试试分开学习表征和分类器
You want the metagenomics - microbiome knowledge in all the (2022.8)
Likou Question of the Day - Day 46 - 344. Reverse Strings
Translate My Wonderful | July Moli Translation Program Winners Announced
你是几星测试/开发程序员?技术型选手王大拿......
ALV报表学习总结
【 LeetCode 】 1374. Generate each character string is an odd number
牛客题目——滑动窗口的最大值、矩阵最长递增路径、顺时针旋转矩阵、接雨水问题
实现fashion_minst服装图像分类
Flutter自带国际化适配自动生成方案
el-tree渲染大量数据的解决方案(不通过懒加载)
【数据分析】:什么是数据分析?
所谓武功再高也怕菜刀-分区、分库、分表和分布式的优劣
GNN教程:图神经网络基础知识!