執行緒的建立:c語言中使用pthread_create函式建立執行緒,即 ret = pthread_create(&th, null, func, null);其中th為:pthread_t th = -1;func為執行緒函式名。
#include #include #include #include #include //定義全域性變數buf,在主線程與子執行緒之間共享
char buf[200] = ;
//定義訊號量
sem_t sem;
// 子執行緒程式,作用是統計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;
}
需要注意的點,子執行緒要有迴圈,不然執行一次就結束了,一定要在前面加訊號阻塞。執行緒用完一定要**使用pthread_join(th,null)函式。最後還要銷毀訊號sem_destroy(&sem) 執行緒訊號量同步
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 ...
執行緒同步 訊號量
執行緒同步方法 訊號量不常用,找到個帖子不錯,記錄一下!依賴的標頭檔案 include 函式宣告 sem t 表示訊號量 int sem init sem t sem,int pshared,unsigned int value 名稱 sem init 功能 initialize an unname...
執行緒同步 訊號量
進化版的互斥鎖 1 n 由於互斥鎖的粒度比較大,如果我們希望在多個執行緒間對某一物件的部分資料進行共享,使用互斥鎖是沒有辦法實現的,只能將整個資料物件鎖住。這樣雖然達到了多執行緒操作共享資料時保證資料正確性的目的,卻無形中導致執行緒的併發性下降。執行緒從並行執行,變成了序列執行。與直接使用單程序無異...