aarm64下yield和x86下pause指令在while中使用的问题

背景:在实现自旋锁时需要用yield或pause指令使CPU等待(自旋)
目前问题:当并发量很大时(96线程及以上),有极大概率每个线程会进入while循环进行自旋然后走不出来,导致全局死锁。(现已确定死锁是逻辑问题,不是yield调度问题,高并发时yield会比nop指令高效,因为nop是在用户态自旋,yield在内核态等待并抛出cpu)
可能原因:yield和pause确实会短暂释放cpu控制权使当前线程睡眠,但是其他获得cpu的线程也进入yield和pause导致循环等待
解决方法:在while条件中增加限制线程持有cpu的时间或次数,避免死锁

posted @ 2024-05-31 09:49  香蕉储蓄所  阅读(54)  评论(0编辑  收藏  举报