当前位置:网站首页>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
}
边栏推荐
- postgresql autovaccum自动清理
- 腾讯云孟凡杰:我所经历的云原生降本增效最佳实践案例
- ALV报表学习总结
- 所谓武功再高也怕菜刀-分区、分库、分表和分布式的优劣
- 特拉维夫大学 | Efficient Long-Text Understanding with Short-Text Models(使用短文本模型进行高效的长文本理解)
- J9数字货币论:识别Web3新的稀缺性:开源开发者
- 美国爱荷华州立大学| Improving Distantly Supervised Relation Extraction by Natural Language Inference(通过自然语言推理改进远程监督关系提取)
- Office2021 安装MathType
- Leetcode刷题——单调栈问题(739每日温度问题、496下一个更大元素I、503下一个更大元素 II)
- ssdp协议搜索GB28181设备
猜你喜欢
随机推荐
Solve the docker mysql can't write Chinese
Lvm逻辑卷
训练双塔检索模型,可以不用query-doc样本了?明星机构联合发文
【SLAM】DM-VIO(ros版)安装和论文解读
基于 flex 布局实现的三栏布局
[AnXun cup 2019] easy_web
TodoList案例
EasyExcel dynamic parsing and save table columns
【软件工程导论】软件工程导论笔记
即时通讯开发移动端网络短连接的优化手段
基于“无依赖绝对定位”实现的圣杯三栏布局
J9 digital theory: the Internet across chain bridge has what effect?
GNN教程:图神经网络基础知识!
分布式事务
JWT学习
信息系统项目管理师必背核心考点(五十八)变更管理的主要角色
对话亚洲高校首个博士论文奖-裘捷中丨KDD2022
You want the metagenomics - microbiome knowledge in all the (2022.8)
golang源码分析之geoip2-golang
V - memo new instructions