lock 语句怎么同时锁定两个变量?

「已注销」 2009-04-15 12:41:30
lock(x)
{
lock(y)
{
dosomething();
}
}

这样的话会不会出什么问题?
有没有什么办法能够直接锁定x 和 y呢? 安全点的。
...全文
307 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
龙宜坡 2009-04-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kkun_3yue3 的回复:]
定义一个类,把两个变量设计为该类的子成员,然后 锁定类实例
[/Quote]

可行!
烈火蜓蜻 2009-04-15
  • 打赏
  • 举报
回复
怎么锁都不要安全,你可以这样做,直接锁第三第个变量,x,y就不要锁了,应该明白这个意思吧
kkun_3yue3 2009-04-15
  • 打赏
  • 举报
回复
定义一个类,把两个变量设计为该类的子成员,然后 锁定类实例
vwxyzh 2009-04-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dozer47528 的回复:]
怎么样才能 lock一个静态类呢?
[/Quote]
必须lock实例
变通的方法是在静态类上声明一个:
private static readonly object SyncObj = new object;
然后去lock这个SyncObj
「已注销」 2009-04-15
  • 打赏
  • 举报
回复
怎么样才能 lock一个静态类呢?
Sysping1 2009-04-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 dozer47528 的帖子:]
lock(x)
{
dosomething1();
lock(y)
{
dosomething2();
}
}

这样的话会不会出什么问题?
有没有什么办法能够直接锁定x 和 y呢? 安全点的。
[/Quote]
这样锁完全没有问题,是顺序执行的,不会出现交叉执行。
前提是:dosomething1() 及 dosomething2()
是线程安全或都在同一线程中!
「已注销」 2009-04-15
  • 打赏
  • 举报
回复
引用 1 楼 kkun_3yue3 的回复:
定义一个类,把两个变量设计为该类的子成员,然后 锁定类实例


如果是一个 静态类,那怎么办?

显示不能锁定 - -|

一定要用普通的类,然后创建实例吗?

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧