在接下來的敘述裡我首先會說明happens-before規則是幹什麼用的,然後用乙個簡單的小程式說明happens-before規則
一、happens-before規則
我們編寫的程式都要經過優化後(編譯器和處理器會對我們的程式進行優化以提高執行效率)才會被執行,優化分為很多種,其中有一種優化叫做重排序,重排序需程式設計客棧要遵守happens-before規則,不能說你想怎麼排就怎麼排,如果那樣豈不是亂了套。
happens-before部分規則如下:
1、程式順序規則:乙個執行緒中的每個操作happens-before於該執行緒中的任意後續操作
2、監視器鎖(同步)規則:對於乙個監視器的解鎖,happens-before於隨後對這個監視器的加鎖
注1:為什麼是部分happens-before原則,因為這篇文章是讓你理解happens-before原則,我會盡量讓你專注在這件事情上不被其他的所影響
注2:程式順序規則中所說的每個操作happens-before於該執行緒中的任意後續操作並不是說前乙個操作必須要在後乙個操作之前執行,而是指前乙個操作的執行結果必須對後乙個操作可見,如果不滿足這個要求那就不允許這兩個操作進行重排序
二、例:下面的方法的功能是計算乙個長方形面積
public double rectanglearea(double length , double width)
上面的操作在執行之前編譯器和處理器可能會進行優化
在程程式設計客棧序中
a happens-before b
b happens-before c
a happens-before c //happens-before具有傳遞規則
根據happens-before規則我們來分析重排序後可能產生的結果
因www.cppcns.com為a hapwww.cppcns.compens-before b,所以a操作產生的結果leng一定要對b操作可見,但是現在b操作並沒有用到length,所以這兩個操作可以重排序,那a操作是否可以和c操作重排序呢,如果a操作和c操作進行了重排序,因為leng沒有被賦值,所以leng=0,area=0*wid也就是area=0;這個結果顯然是錯誤的,所以a操作是不能和c操作進行重排序的(這就是注2中說的前乙個操作的執行結果必須對后羿操作可見,如果不滿足這個要求就不允許這兩個操作進行重排序)
本文標題: 簡單易懂講解happens-before原則
本文位址:
通俗講解KMP演算法,簡單易懂
相比較傳統的暴力匹配字串演算法,kmp演算法有了比較大的改進,但是它卻更難理解,尤其是next陣列的求解部分。本人也反覆學習了幾次,每次弄懂但幾個月就忘了,然後就找部落格重新學,下次忘了就能看自己的博文了,哈哈。模式串 abcabcabda 目標串 abcabd 暴力演算法中當目標串第六個字母d不匹...
Bp神經網路詳細講解,一簡單易懂
上圖的圓圈就代表乙個感知器。它接受多個輸入 x1,x2,x3 產生乙個輸出 output 好比神經末梢感受各種外部環境的變化,最後產生電訊號。為了簡化模型,我們約定每種輸入只有兩種可能 1 或 0。如果所有輸入都是1,表示各種條件都成立,輸出就是1 如果所有輸入都是0,表示條件都不成立,輸出就是0。...
vue 計算屬性最通用的講解 簡單 易懂
1.vue計算屬性,computed 官網概念 模板內的表示式非常便利,但是設計它們的初衷是用於簡單運算的。在模板中放入太多的邏輯會讓模板過重且難以維護.這句話看似簡單,並且配上了乙個十分簡單的demo,導致很多同學在使用computed的時候,並沒有真正的領會到,計算屬性的執行原理與過程。1.第乙...