linux c中多執行緒與volatile變數
volatile 修飾的變數表示改變量的值是易mttrvbdam變的,編譯器不對其進行優化,訪問該變數的時候不會從暫存器讀取, 而是直接從記憶體讀取變數。
在多執行緒環境下,每個執行緒都有乙個獨立的暫存器,用於儲存當前執行的指令。假設我們定義了乙個全域性變數,每個執行緒都會訪問這個全域性變數,這時候執行緒的暫存器可能會儲存全量變數的當前值用於後續的訪問。當某個執行緒修改了全域性變數的值時,系統會立即更新該執行緒暫存器中對應的值,其他執行緒並不知道這個全域性變數已經修改,可能還是從暫存器中獲取這個變數的值,這個時候就會存在不一致的情況。
針對多執行緒訪問共享變數而且變數還會經常變化的情況,利用volatile型別修飾變數是乙個很好的選擇,如volati程式設計客棧le int size = 10; 當多執行緒訪問這個變數時,它會直接從size對應的位址訪問,而不會從執行緒對應的暫存器訪問,這樣就不會出現前面說到的
同一變數的值在多個執行緒之間不一致的情況。
下面貼出乙個多執行緒環境下使用 volatile 變數的例子:
#include
#include
#include
/* volatile變數控制線程的執行與結束 */
static volatile int do_run_thread = 1;
static pthread_t thread_tid;
static void *work_th程式設計客棧read(void *arg)
printf("stop thread done!\n"); }
static void start_thread()
static void stop_thread()
int main()
本文標題: linux c中多執行緒與volatile變數
本文位址: /os/linux/195409.html
linux C 多執行緒
標頭檔案 include 執行緒建立 pthread create 執行緒退出 pthread exit 互斥鎖 pthread mutex init pthread mutex lock pthread mutex unlock void thread function void arg if 0...
linux C 多執行緒程式設計
1.solaris vs.linux posix 庫 solaris 庫 lib 執行緒 linux posix 庫 libp 執行緒 操作sema destroy sem destroy 銷毀訊號狀態。sema init sem init 初始化訊號。sema post sem post 增加訊號...
linux C 多執行緒程式設計
1.solaris vs.linux posix 庫 solaris 庫 lib 執行緒 linux posix 庫 libp 執行緒 操作sema destroy sem destroy 銷毀訊號狀態。sema init sem init 初始化訊號。sema post sem post 增加訊號...