老师,我想请问下 monitorenter 这个指令
来源:13-6 可见性

多捞啊
2020-02-25
老师,下面是我对 synchronzied 的底层过程的部分小结
- 打算上锁的线程,会先通过关联的对象(实例对象或者 class 对象) 的 对象头中的 64bit 的 Mark Word 区间的一个指针,找到关联当前对象 monitor 对象
- 然后进入 monitor 的 entrylist 队列中等待竞争锁
- 在步骤2 后我有几个小问题
a. entrylist 队列中的线程在竞争锁的时候,是采用对 monitor 中的计数器采取类似 (compaeAndSet(0, 1)) 的cas 方式上锁的是么
b. 如果是 cas 方式上锁,我想请问下 monitorenter 这个指令,是在 cas 竞争前加入的还是 cas 成功后才加入的 ()
写回答
1回答
-
实际上锁的过程,如果深入CPP源码,过程相当复杂,我推荐几个经过筛选的讲了这个问题的文章给你哈,相信看完以后能有更深入了理解: https://www.jianshu.com/p/c5058b6fe8e5 https://www.cnblogs.com/kundeg/p/8422557.html https://github.com/farmerjohngit/myblog/issues/12012020-02-26
相似问题