多核处理器是否会发生上下文切换?单核无锁访问共享资源安全吗?
上下文切换与单核共享资源锁问题解答
1. 多核处理器上是否会发生上下文切换?
上下文切换不仅会在单核处理器上发生,多核处理器同样会出现:
- 每个CPU核心都是独立的执行单元,单个核心的线程调度逻辑和单核一致:当线程时间片耗尽、触发阻塞操作(如IO等待)或被更高优先级线程抢占时,就会触发上下文切换。
- 此外,操作系统可能将线程从当前运行的核心迁移到其他核心执行,这个过程也需要完成上下文切换——把线程的寄存器状态、栈信息等从原核心转移到新核心的对应存储区域。
2. 单核处理器访问共享资源可以完全不用锁吗?
答案是不能,即使单核处理器,不使用锁访问共享资源也存在安全风险,核心原因包括:
- 非原子操作的中断风险:很多看似简单的读写操作实际是非原子的。比如32位系统中读写64位整数,会拆分为两次32位操作。如果线程在第一次操作完成后被中断(触发上下文切换),另一个线程此时读取该变量,拿到的就是不完整的中间值,导致数据不一致。
- 可见性问题:编译器或CPU为了优化性能,可能将变量缓存到寄存器中,或者调整指令执行顺序。线程切换后,另一个线程可能读取到内存中未更新的旧值,无法获取最新的变量状态。
- 内核信号/中断的干扰:即使没有其他用户线程,内核的信号处理程序也可能在任意时刻打断用户线程的执行。如果信号处理逻辑也会访问该共享资源,同样会导致数据异常。
内容的提问来源于stack exchange,提问作者user19551894
相关产品推荐
相关产品推荐

