synchronized根本没用到mutex lock
不知道为什么网上看到的介绍都说synchronized的重量级锁底层依赖的是mutex lock,会有用户态和内核态的切换,但实际上看jvm hotspot源码根本没有用到mutex lock啊
加锁:
没有竞争到锁的线程会挂起,这部分确实有内核态的切换,但绝对不是使用到了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
不知道我的理解对不对求助各位大神
...全文
相关推荐
Synchronized 和 Lock 的区别和使用场景
二、Lock接口Lock接口提供了更灵活的锁控制,比`synchronized`更加细粒度。使用Lock需要显式地获取和释放锁,这提供了更大的控制权但同时也要求开发者有更高的责任感。
Java synchronized关键字和Lock接口实现原理
ReentrantLock 类的实现原理是基于操作系统的互斥锁(Mutex Lock)。ReentrantLock 类的实现原理ReentrantLock 类的实现原理是基于以下步骤:1.
Java编程synchronized与lock的区别【推荐】
Java 编程 synchronized 与 Lock 的区别synchronized 和 Lock 是 Java 编程中两种常用的同步机制,用于实现线程安全的访问。
简单了解synchronized和lock的区别
synchronized和lock的主要区别在于:1. synchronized是一个关键字,而lock是一个接口。
Synchronized与Lock
Synchronized与Lock"这个主题探讨了两种主要的同步机制:synchronized关键字和Lock接口(包括其实现类如ReentrantLock)。


