synchronized根本没用到mutex lock

weixin_37551600 weixin_37551600 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
不知道为什么网上看到的介绍都说synchronized的重量级锁底层依赖的是mutex lock,会有用户态和内核态的切换,但实际上看jvm hotspot源码根本没有用到mutex lock啊
加锁:
int ObjectMonitor::TryLock (Thread * Self) {
for (;;) {
void * own = _owner ;
if (own != NULL) return 0 ;//如果有线程还拥有着重量级锁,退出
//CAS操作将_owner修改为当前线程,操作成功return>0
if (Atomic::cmpxchg_ptr (Self, &_owner, NULL) == NULL) {
return 1 ;
}
//CAS更新失败return<0
if (true) return -1 ;
}
}


没有竞争到锁的线程会挂起,这部分确实有内核态的切换,但绝对不是使用到了mutex lock
不知道我的理解对不对求助各位大神
...全文
评论 2
收藏 已收藏
分享
返回顶部
weixin_37551600
Java 51,407 成员 86,126 内容