Linux 執行緒特性舉例

2021-08-20 19:32:23 字數 2379 閱讀 2628

這裡主要演示執行緒的以下幾個特性

同組執行緒共用同一位址空間

#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 必須要有兩...