ivechan
2021-05-03 22:14:09 +08:00
>cpu 只有一个核心,A 线程占用了 CPU,B 应该不能自旋了吧??
是的,A 线程占用了 CPU,B 线程的代码无法执行
>是不是只能等 A 执行完毕
不是的。即使 A 线程占用了 CPU,那也不意味着你能一直占着直到你的任务结束。
有因素会打算 A,然后切换到 B 。比如分给 A 任务的时间消耗完了,A 被调度出去;
比如中断和抢占打断了。
另外,不要用户态使用自旋锁,非常非常地愚蠢,除非你真的清楚自己在做什么。
引用 Linus 的话:
>I repeat: do not use spinlocks in user space, unless you actually know what you're doing. And be aware that the likelihood that you know what you are doing is basically nil.