volatile 的學習要點

2021-07-16 05:39:57 字數 662 閱讀 5625

第乙個重點:要了解,多執行緒之間的通訊機制有兩種,共享記憶體和訊息傳遞。另外除了主存之外,每乙個執行緒都有乙個私有的本地記憶體空間(local memory)。本地記憶體中儲存了該執行緒以讀/寫共享變數的副本。其實本地記憶體是jmm的乙個抽象概念,並不真實存在,它涵蓋了快取,寫快取區,暫存器以及其他的硬體和編譯器的優化。

第二個重點:重排序的問題。

在執行程式的時候,為了提高效能,編譯器和處理器常常會對指令做重排序,重排序分為3種。

1:編譯器優化的重排序。

2:指令集並行重排序。

3:記憶體系統的重排序。

最後,對volatile進行介紹,它具有以下特性。

1)可見性。對乙個volatile變數的讀,總是能看到(任意執行緒)對這個volatile變數最後的寫入。

2)原子性。對任意單個volatile變數的讀/寫具有原子性,但類似於volatile++這種復合操作不具有原子性。

3)根據之前所說的通訊機制,volatile是通過清除第二個執行緒中已有的本地記憶體中的變數資訊為無效,使得執行緒b不得不去主線程去獲取共享變數以得完成變數的可見性。

4)volatile修飾的變數的讀、寫都會在每一次讀寫前會加入屏障,來禁止程式的重新排序。

C學習 volatile的用法

volatile 影響編譯器編譯的結果 指出,volatile 變數是隨時可能發生變化的,與 volatile 變數有關的運算,不要進行編譯優化,以免出錯,vc 在產生release 版可執行碼時會進行編譯優化,加 volatile 關鍵字的變數有關的運算,將不進行編譯優化。例如 volatile ...

C 學習要點

1.傳指標時,我們可以通過指標來修改它在外部所指向的內容。但如果要修改外部指標所指向的物件是不可能的。例如傳遞外部指標到函式內來分配空間,必須傳遞指標的指標或指標的引用。2.char carry 10 編譯器會將其後所有的東西都置0 3.函式返回值為const時,返回的東西付給乙個型別相同的標示後其...

TCP學習要點

tcp是tcp ip協議簇中傳輸層上的一種網路協議,它是一種面向連線的 可靠的協議。為了提供這種可靠性,tcp實現了各種有效的機制 演算法。為了從一種巨集觀的角度去了解這個協議,這裡先大致地提一下與之相關 的概念。1.什麼是 面向連線的 引用中的概念 面向連線意味著兩個使用tcp的應用 通常是乙個客...