指令重排序案例的個人觀點

2021-10-10 08:21:50 字數 927 閱讀 2830

在併發程式設計中,我們知道併發程式設計三大特性:原子性, 可見性, 有序性

其中有序性就和指令重排序有關.

在網路上的一些教程中,講到指令重排序時,為了驗證會出現指令重排序,會使用下面這個案例**

public

class

example

,"執行緒1");

thread t2 =

newthread((

)->

,"執行緒2");

t1.start()

; t2.

start()

;// 使用join是為了讓t1和t2執行緒先執行完成之後,main執行緒再判斷i和j是否等於0

上面就是網路課中的答案.

我並不認同紅色字型的答案,即便不發生指令重排,也會出現i=0,j=0的情況.

因為即便執行緒1先執行,執行完成之後,a=1,i=0,但是此時並沒有將a和i的值重新整理到主記憶體,因此執行緒2獲取到的a的值依然是0, 所以最後i=0,j=0也會出現.並不是說只有指令重排才會出現i=0,j=0.

而且網課中會認為出現i=1,j=1的情況,我個人也不同意這個觀點.

即便執行緒1先執行了a=1,就切到執行緒2執行,但是畢竟執行緒1還沒有執行完,變數a也沒有使用volatile修飾,因此執行緒2是看不到執行緒1修改後的a=1的結果.因此永遠不會存在i=1,j=1的情況.

個人站點語雀

Q3的紛爭個人觀點

近期,q3如火如荼,讓人憤怒不已,讓人反思幾件事情 1 人的本性 這點不像說什麼,360現任ceo到底在幹嘛?乙個3721的流氓軟體,現在又將別人建立的360變成第二個3721,誰來負責?乙個原本服務於大眾的東西,現在讓大家服務於他,於心何忍。不知360開始是什麼,傅盛為何要和以前的3721ceo搞...

關於MFC與Qt的個人觀點

至今為止,我都沒有學習任何mfc與qt方面的知識,原因有兩個 首先我從內心鄙夷這兩種框架,因為他們只是授魚而不授漁,我買了侯傑老師的 深入淺出mfc 後只潦潦草草翻了下後就丟到一邊了,並不是因為書寫的不好而是我對這種能夠快速寫出gui程式的框架沒什麼好感。再者我認為我自己沒有到應該學習mfc與qt的...

效能測試的常規流程 個人觀點

2.設計測試用例 準備測試資料 壓測主要目的 評估真實環境中系統在高負載狀態下的 qps 每秒鐘request 事務 數量 平均響應時間 常見問題 案例一 測試環境和實際環境的配置不一致 案例二 沒有明確目標的需求 需求方不會告訴你,某乙個介面的具體指標 qps 所以在開始測試前我們需要結合測試業務...