首页 新闻 会员 周边 捐助

C#中为什么lock(obj)能让线程同步?

0
[已解决问题] 解决于 2017-02-23 16:15

这样的语法:

Object thisLock = new Object();
lock (thisLock)
{
    // Critical code section
}

创建的是object基类对象,那么为什么给一个基类对象加锁就能在此确保只有一个线程位于代码的临界区?它的实现原理是什么?

 

怀川的主页 怀川 | 初学一级 | 园豆:198
提问于:2017-02-23 14:57
< >
分享
最佳答案
1

每一个对象都有一个 "同步索引块" 的东西。


奖励园豆:5
长蘑菇星人 | 小虾三级 |园豆:1832 | 2017-02-23 15:16

能不能具体说下?

怀川 | 园豆:198 (初学一级) | 2017-02-23 15:27

@怀川: 锁的话,去看书吧。
lock应该是 自旋锁+内核锁(逃,我不记得了。
占用条件是 同步索引块 中有标识


长蘑菇星人 | 园豆:1832 (小虾三级) | 2017-02-23 15:32

@长蘑菇星人: 看哪本书?

怀川 | 园豆:198 (初学一级) | 2017-02-23 15:34

@怀川: CLR


长蘑菇星人 | 园豆:1832 (小虾三级) | 2017-02-23 15:36

@长蘑菇星人: 谢谢!

怀川 | 园豆:198 (初学一级) | 2017-02-23 15:37
其他回答(1)
-2

没有为什么,下面这么做就具备该能力。

你问汽车为什么能刹车 —— 因为有刹车系统!

花飘水流兮 | 园豆:13595 (专家六级) | 2017-02-23 15:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册