原子操作:是不可被中斷的
i++不是原子操作
分為3步:
<1> 先從記憶體中把i取出來放到暫存器中
<2>然後++,
<3>然後再把i複製到記憶體中,這需要至少3步
1. 什麼是作業系統的「原子操作」
原子操作是不可分割的,在執行完畢不會被任何其它任務或事件中斷,分為兩種情況(兩種都應該滿足)
(1) 在單執行緒中, 能夠在單條指令中完成的操作都可以認為是" 原子操作",因為中斷只能發生於指令之間。
(2) 在多執行緒中,不能被其它程序(執行緒)打斷的操作就叫原子操作。
2. 面試的時候經常問的一道題目是i++在兩個執行緒裡邊分別執行100次,能得到的最大值和最小值分別是多少?(2 -200)
i++只需要執行一條指令,並不能保證多個執行緒i++,操作同乙個i,可以得到正確的結果。因為還有暫存器的因素,多個cpu對應多個暫存器。每次要先把i從記憶體複製到暫存器,然後++,然後再把i複製到記憶體中,這需要至少3步。從這個意義上講,說i++是原子的並不對。
i 是原子操作嗎
什麼是原子操作?所謂原子操作,就是 不可中斷的乙個或一系列操作 在確認乙個操作是原子的情況下,多執行緒環境裡面,我們可以避免僅僅為保護這個操作在外圍加上效能開銷昂貴的鎖。那麼,gnu c中x 是原子操作嗎?請看下面一段 cpp view plain copy print?include includ...
i 是不是原子操作
可能我們對i 或者 i的用法已經爛熟於心,但是有次去浦發面試,面試官問,i 是不是原子操作,當是問懵了,回來惡補一下 問這個問題,面試官是想考察你對記憶體的理解。首先,之所以要討論是不是原子操作,因為如果是原子操作的話,在多執行緒操作時,就不用為了保護這個操作而加上昂貴又耗費效能的鎖。在單核作業系統...
i 和 i 是否為原子操作?
2021年02月22日 周一 天氣晴 不悲嘆過去,不荒廢現在,不懼怕未來 參考文獻 原子操作是不可分割的,在執行完畢前不會被任何其它任務或事件中斷 在單執行緒中,能夠在單條指令中完成的操作都可以認為是 原子操作,不能在單條指令中完成的操作也都可以認為不是原子操作,因為中斷可以且只能發生於指令之間 在...