老师,我想请问下 monitorenter 这个指令

来源:13-6 可见性

多捞啊

2020-02-25

老师,下面是我对 synchronzied 的底层过程的部分小结

  1. 打算上锁的线程,会先通过关联的对象(实例对象或者 class 对象) 的 对象头中的 64bit 的 Mark Word 区间的一个指针,找到关联当前对象 monitor 对象
  2. 然后进入 monitor 的 entrylist 队列中等待竞争锁
  • 在步骤2 后我有几个小问题
    a. entrylist 队列中的线程在竞争锁的时候,是采用对 monitor 中的计数器采取类似 (compaeAndSet(0, 1)) 的cas 方式上锁的是么
    b. 如果是 cas 方式上锁,我想请问下 monitorenter 这个指令,是在 cas 竞争前加入的还是 cas 成功后才加入的 ()
写回答

1回答

悟空

2020-02-25

实际上锁的过程,如果深入CPP源码,过程相当复杂,我推荐几个经过筛选的讲了这个问题的文章给你哈,相信看完以后能有更深入了理解: https://www.jianshu.com/p/c5058b6fe8e5 https://www.cnblogs.com/kundeg/p/8422557.html https://github.com/farmerjohngit/myblog/issues/12
0
1
多捞啊
辛苦老师了,这几篇很赞
2020-02-26
共1条回复

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程