原子操作是不可分割的操作,在原子操作執(zhí)行完畢之前,其不會(huì)被任何其它任務(wù)或事件中斷。在單處理器系統(tǒng)(UniProcessor)中, 能夠在單條指令中完成的操作都可以認(rèn)為是" 原子操作",因?yàn)橹袛嘀荒馨l(fā)生于指令之間。某些CPU指令系統(tǒng)中引入了test_and_set、test_and_clear等指令產(chǎn)生臨界資源互斥效果。
在對(duì)稱(chēng)多處理器(Symmetric Multi-Processor)結(jié)構(gòu)中因?yàn)榇嬖诙鄠€(gè)處理器之間將相互并行的搶占計(jì)算機(jī)資源,即處理器之間并行的相互強(qiáng)行切換,即使能在單條指令中完成的操作也有可能受到干擾。
CPU提供了在指令執(zhí)行期間對(duì)總線(xiàn)加鎖的手段。CPU芯片上有一條引線(xiàn)#HLOCK pin,如果當(dāng)匯編語(yǔ)言的程序中在一條指令前面被加上前綴"LOCK",經(jīng)過(guò)底層匯編以后的產(chǎn)生的機(jī)器代碼就使CPU在執(zhí)行這條指令期間把引線(xiàn)#HLOCK pin的電位拉低,電位拉低促使同一總線(xiàn)上別的CPU就暫時(shí)不能通過(guò)總線(xiàn)訪(fǎng)問(wèn)內(nèi)存了,結(jié)束其他CPU的干擾影響,一直持續(xù)到這條lock鎖指令結(jié)束時(shí)放開(kāi)電位重新恢復(fù)至高電位,使得其他CPU可以通過(guò)總線(xiàn)訪(fǎng)問(wèn)內(nèi)存。在此期間,保證了同一時(shí)間段下只有這條唯一的指令被執(zhí)行并順利完畢,既保證了這條指令即便在多處理器環(huán)境中依然具有不被干擾的原子特性。
簡(jiǎn)單來(lái)講:在cpu中要保證一條一條指令順利執(zhí)行完畢,原子性則就是一條指令,去完成讀寫(xiě)操作。