多线程程序,当一条原子指令刚执行一半的时候,CPU时间片耗尽,此时是立刻切换线程吗

2025-12-17 10:43:43
推荐回答(1个)
回答1:

首先,关于原子性的定义,是”不可中断的一个或一系列操作”。你这个问题涉及到临界点的情况。
在单处理器系统中,能够在单条指令中完成的操作都可以认为是” 原子操作”,因为中断只能发生于指令之间。 这也是某些CPU指令系统中引入了test_and_set、test_and_clear等指令用于临界资源互斥的原因。
在多处理器结构中就不同了,由于系统中有多个处理器在独立地运行,即使能在单条指令中完成的操作也有可能受到干扰。
在x86 平台上,CPU提供了在指令执行期间对总线加锁的手段。 CPU芯片上有一条引线#HLOCK pin,如果汇编语言的程序中在一条指令前面加上前缀”LOCK”,经过汇编以后的机器代码就使CPU在执行这条指令的时候把#HLOCK pin的电位拉低,持续到这条指令结束时放开,从而把总线锁住,这样同一总线上别的CPU就暂时不能通过总线访问内存了,保证了这条指令在多处理器环境中的原子性。
总结来说,时间片到了,但是原子性操作未完成,还是会继续执行原子性操作。