当前位置:网站首页>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
}
边栏推荐
猜你喜欢
Flutter自带国际化适配自动生成方案
"A daily practice, happy water problem" 1374. Generate a string with an odd number of each character
AI Scientist: Automatically discover hidden state variables of physical systems
Redis 5 种数据结构及对应使用场景
Three.js入门
顺序查找和折半查找,看这篇就够了
unittest自动化测试框架总结
In action: 10 ways to implement delayed tasks, with code!
【手撕AHB-APB Bridge】~ AMBA总线 之 APB
信息学奥赛一本通(1258:【例9.2】数字金字塔)
随机推荐
Geoip2 - golang golang source code analysis
golang源码分析之geoip2-golang
pytorch的tensor创建和操作记录
软件测试分类
有效解决MySQL报错:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO/YES)
Introduction of uncommon interfaces of openlayers
Leetcode刷题——字符串相加相关题目(415. 字符串相加、面试题 02.05. 链表求和、2. 两数相加)
2170. 使数组变成交替数组的最少操作数
J9 Digital Currency Theory: Identifying Web3's New Scarcity: Open Source Developers
Office2021 安装MathType
Meta 与苹果的元宇宙碰撞
4KMILES加入艾盛集团,以更强劲的数字商务能力,加速中国跨境电商的全域全效增长
APP自动化uiautomator2获取toast
LeetCode 622 设计循环队列[数组 队列] HERODING的LeetCode之路
一些不错的博主
对话亚洲高校首个博士论文奖-裘捷中丨KDD2022
姑姑:给小学生出点口算题
ABAP语法小复习
EasyExcel实现动态列解析和存表
You want the metagenomics - microbiome knowledge in all the (2022.8)