首先我看了一篇CAS的文章。https://www.jianshu.com/p/ae25eb3cfb5d
1.在記憶體地址V當中,存盤著值為10的變數。
2.此時執行緒1想要把變數的值增加1。對執行緒1來說,舊的預期值A=10,要修改的新值B=11
3.在執行緒1要提交更新之前,另一個執行緒2搶先一步,把記憶體地址V中的變數值率先更新成了11。
4.執行緒1開始提交更新,首先進行A和地址V的實際值比較(Compare),發現A不等于V的實際值,提交失敗。

5.執行緒1重新獲取記憶體地址V的當前值,并重新計算想要修改的新值。此時對執行緒1來說,A=11,B=12。這個重新嘗試的程序被稱為自旋。
我的問題:步驟4中,如果CPU調度執行緒2,執行的是判斷指令if(10==10),回傳true。接下來CPU調度回執行緒1,也執行if(10==10),也回傳true,那不是相當于并發問題依然存在嗎?還是說if判斷后+修改主存的值為一條指令,被加載執行嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/133129.html
標籤:Java相關
上一篇:在idea里下了Maven不知道配置了什么不再run的小框框里運行,一直報錯
下一篇:前端上傳大檔案失敗
