這裡主要演示執行緒的以下幾個特性
同組執行緒共用同一位址空間
#include
#include
#include
#include
//1.共享全域性區資源
int g_count = 0;
void* threadentry1(void* arg)
return null;
} void* threadentry2(void* arg)
return null;
} int main()
上面**中,有乙個全域性變數 g_count,兩個執行緒,同時嘗試去對 全域性變數 g_count 進行修改
結果演示:
根據執行結果,我們可以看到,同組執行緒對全域性變數是共享的
#include
#include
#include
#include
//2.共享堆上的資源
void* threadentry1(void* arg)
return null;
} void* threadentry2(void* arg)
return null;
} int main()
上面**中,在main函式中malloc出了一段空間,這段空間在堆上,執行緒1和2同時去修改這個堆上的變數。
//3.共享執行緒棧
// 使用棧上變數比較危險,我們使用前必須保證變數存在
// 但是主線程比較安全,因為他存在於整個程序
void* threadentry1(void* arg)
return null;
} void* threadentry2(void* arg)
return null;
} int main()
**中將主線程棧上乙個變數a傳給兩個執行緒的執行緒入口函式,執行緒1和2分別隨主線程棧上的元素進行改變。
注意:修改棧上的資源是比較危險的,因為我們說過,每個執行緒都有自己的乙個棧,這個但是這個棧是可以被訪問也可以被改變的,試想,如果執行緒1已經退出了,執行緒2嘗試去修改執行緒1棧上的元素,這是就很可能造成訪問越界!但是,訪問主線程棧上的元素相對比較安全,因為主線程棧是大家所共享的。
執行緒退出引起程序退出
執行緒組中某乙個執行緒訪存異常,都會導致程序異常終止。
#include
#include
#include
#include
//解引用空指標
//會導致硬體裝置mmu發現這是乙個異常操作
//會給作業系統傳送乙個異常
//作業系統核心就會給程序傳送11號訊號,導致程序異常終止 - 段錯誤
//解引用空指標使執行緒異常終止,觀察
//執行緒一旦異常終止,就會導致整個程序都結束掉
void* threadentry1(void* arg)
return null;
} void* threadentry2(void* arg)
return null;
} int main()
執行緒嘗試對空指標解引用時,程序終止。
多執行緒充分利用多核cpu資源
#include
#include
#include
#include
//利用top指令檢視cpu佔用率
void* threadentry(void* arg)
return null;
} int main()
for(i = 0; i < n; ++i)
return 0;
} 建立兩個執行緒,這兩個執行緒一直在死迴圈(可換成具體場景)。
如上圖觀察,cpu佔用率可高達400%(四核cpu),證明我們充分利用了cpu資源。
執行緒的舉例理解
threadmessage starting messageloop thread 提示main執行緒起動 long starttime system.currenttimemillis 獲得當時時間點,用來判斷子執行緒啟動的時間 thread t new thread new messageloo...
多執行緒的舉例
1.多程序實現簡單列印 include include 程序 include void run void p 字元陣列 sprintf str,執行緒 d啟動 px messageboxa 0,str,多執行緒 0 void main system pause 2.多執行緒實現查詢 include ...
JAVA 多執行緒舉例
同步函式用的是哪乙個鎖呢?函式需要被物件呼叫。那麼函式都有乙個所屬物件引用。就是this。所以同步函式使用的鎖是this。下面通過程式進行驗證。使用兩個執行緒來買票。乙個執行緒在同步 塊中。乙個執行緒在同步函式中。都在執行買票動作。最後一行不是我們所希望看到的結果,試想同步的兩個原則 1 必須要有兩...