《朱老師物聯網大講堂》學習筆記
下面是老師課上示例**,
這裡使用的訊號量,和我們之前那個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 ...