C語言面試常見問題總結 執行緒間通訊的三種方法

2021-10-09 10:23:53 字數 773 閱讀 2819

多執行緒通訊的方法主要有以下三種: 

1.全域性變數

程序中的執行緒間記憶體共享,這是比較常用的通訊方式和互動方式。

注:定義全域性變數時最好使用volatile來定義,以防編譯器對此變數進行優化。

linux系統中的執行緒間通訊方式主要以下幾種:

*鎖機制:包括互斥鎖、條件變數、讀寫鎖和自旋鎖。

互斥鎖確保同一時間只能有乙個執行緒訪問共享資源。當鎖被占用時試圖對其加鎖的執行緒都進入阻塞狀態(釋放cpu資源使其由執行狀態進入等待狀態)。當鎖釋放時哪個等待執行緒能獲得該鎖取決於核心的排程。

讀寫鎖當以寫模式加鎖而處於寫狀態時任何試圖加鎖的執行緒(不論是讀或寫)都阻塞,當以讀狀態模式加鎖而處於讀狀態時「讀」執行緒不阻塞,「寫」執行緒阻塞。讀模式共享,寫模式互斥。

條件變數可以以原子的方式阻塞程序,直到某個特定條件為真為止。對條件的測試是在互斥鎖的保護下進行的。條件變數始終與互斥鎖一起使用。

2.message訊息機制

常用的message通訊的介面主要有兩個:postmessage和postthreadmessage,

postmessage為執行緒向主視窗傳送訊息。而postthreadmessage是任意兩個執行緒之間的通訊介面。

3.cevent物件

cevent為mfc中的乙個物件,可以通過對cevent的觸發狀態進行改變,從而實現執行緒間的通訊和同步。

C語言面試常見問題總結 static

static的本質 static 是定義靜態變數用的,在程式執行中他只會被初始化一次。靜態變數的實質是 靜態儲存方式,其儲存空間為記憶體中的靜態資料區 1 先來介紹它的第一條也是最重要的一條 隱藏。當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。為理解這句話,...

C語言常見問題總結

1.用 注釋 在c語言中不是好辦法,尤其是在注釋的 中原先已經有注釋存在,可能會報錯,更好的辦法是用 if 和 endif 2.如果有一些宣告需要用於幾個不同的原始檔,可以在乙個單獨的檔案編寫這些宣告,然後用 include命令把這個檔案包含到需要使用這些宣告的原始檔中 3.標準的c編譯器不會對陣列...

C 面試常見問題

1.引用和指標的區別 區別 1 引用不能為空,指標可以為空 2 引用必須初始化,指標不需要 3 引用初始化以後不能改變,指標可以改變初始化物件後的值 4 引用訪問物件後是直接訪問,指標訪問物件是間接訪問 5 引用大小是所引用物件的大小,指標大小是指標類本身的大小 6 引用沒有const,指標有con...