執行緒同步之訊號量1 2

2021-07-23 08:21:39 字數 867 閱讀 9052

《朱老師物聯網大講堂》學習筆記          

下面是老師課上示例**,

這裡使用的訊號量,和我們之前那個cnt的例子很相似,

不過這裡系統為我們提供了封裝,

注意看sem_相關的函式,

post函式,給訊號量加1,

wait函式,給訊號量減1,前提是訊號量大於0,

然後就是由os自己決定如何排程了,

#include #include #include #include #include char buf[200] = ;

sem_t sem;

unsigned int flag = 0;

// 子執行緒程式,作用是統計buf中的字元個數並列印

void *func(void *arg)

pthread_exit(null);

}int main(void)

printf("輸入乙個字串,以回車結束\n");

while (scanf("%s", buf))

// 主線程在收到使用者收入的字串,並且確認不是end後

// 就去發訊號啟用子執行緒來計數。

// 子執行緒被阻塞,主線程可以啟用,這就是執行緒的同步問題。

// 訊號量就可以用來實現這個執行緒同步

sem_post(&sem); }

// **子執行緒

printf("等待**子執行緒\n");

ret = pthread_join(th, null);

if (ret != 0)

printf("子執行緒**成功\n");

sem_destroy(&sem);

return 0;

}

執行緒同步之訊號量同步

linux中兩種基本的同步方法是訊號量和互斥量。這兩種方法很相似,而且它們可以相互通過對方來實現。現在有個圖書館,其能容納100人,現在有兩個執行緒a b,a執行緒執行 往圖書管理進入乙個人,b執行緒 從圖書館出來乙個人。那麼為了使得執行緒a在圖書館滿人的時候進入等待,而不是繼續往圖書館裡進人,使得...

執行緒同步之訊號量

什麼是訊號量 linux sem 訊號量是一種特殊的變數,訪問具有原子性,用於解決程序或執行緒間共享資源引發的同步問題。使用者態程序對 sem 訊號量可以有以下兩種操作 等待訊號量 當訊號量值為 0 時,程式等待 當訊號量值大於 0 時,訊號量減 1,程式繼續執行。傳送訊號量 將訊號量值加 1 通過...

執行緒訊號量同步

thread sem.c include include include include define thread number 3 define repeat number 3 define delay time levels 10.0 sem t sem thread number void ...