有谁知道,为什么reentrantlock里面的park…

有谁知道,为什么reentrantlock里面的park方法,可以传入thread而发信号唤醒指定线程?底层pthread_cond_signal并不能指定唤醒的线程呀。我理解是不是先唤醒第一个挂起的线程?呼唤大神

程序猿.爱妃给朕拿点纸:难道不是根据aqs里面节点来控制的?我记得好像是头节点下一个不为null的等待节点

程序猿.独孤剑魔:m

楼主:那个不是根本,只是上层的

程序猿.爱妃给朕拿点纸:你的意思park,unpark怎么工作的?

楼主:怎么做到想唤醒哪个线程,就唤醒哪个线程

宋兵乙:m

假意或真心:m

华为技术有限公司员工:最近正在看类似的东西,mark下

宋兵乙:pthread_cond_signal底层是futex,futex有两个选项:FUTEX_WAIT_BITSET和FUTEX_WAKE_BITSET,这两个选项组合可以用来唤醒指定的线程。大概做法应该是保存线程号和FUTEX_WAIT_BITSET的映射然后使用对应的FUTEX_WAKE_BITSET唤醒线程

楼主:感谢大佬,但是我并没有在unpark方法底层看到有操作这两个bitset的地方

程序猿.c是最好的语言:m

宋兵乙:很遗憾没能帮到你[笑哭],这个futex是pthread_cond_signal的底层实现,或许pthread封装了BITSET?我也不是很清楚,不过是可以实现指定线程唤醒就是了,pthread有没有封装我就不知道了

腾讯员工:m

阿里巴巴员工[2]:mark

桃根仙:M

美团员工:m

文丑:m