问个问题,公平锁和非公平锁

公平锁获取锁的线程类似于先进先出队列,而非公平锁获取的锁不是有序的,可能会有“插队”现象,为什么效率上非公平锁要高,百度说公平锁会造成线程上下文的切换次数增加,怎么理解这个
全部评论
我的理解是如果A,B竞争资源,然后A获得资源,B阻塞。A完成后释放资源,B被唤醒,但是这个唤醒需要时间,C的话现在处于就绪状态,如果是非公平的话C就可以在B唤醒期间直接获得对象然后完成任务,之后B再继续。
点赞 回复 分享
发布于 2017-09-18 09:56
楼上基本正解,对于非公平锁:“同步队列”中的每个Node始终自旋地CAS竞争同步状态;对于公平锁:“同步队列”中的每个Node,当检测到它的pre不是队列头节点时就await()了,当队列头结点任务完成后,会执行signal()唤醒它的next节点
点赞 回复 分享
发布于 2017-09-19 10:18
AQS源码上体现的是,在尝试获取锁的时候,公平锁一定要获取clh队列的头节点指向的线程,而非公平锁则没有这个判断条件,所以公平锁当然效率相对要低啦。
点赞 回复 分享
发布于 2017-09-19 10:02

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务