執行緒同步訊號量

2021-10-17 19:13:56 字數 939 閱讀 2868

執行緒的建立: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 由於互斥鎖的粒度比較大,如果我們希望在多個執行緒間對某一物件的部分資料進行共享,使用互斥鎖是沒有辦法實現的,只能將整個資料物件鎖住。這樣雖然達到了多執行緒操作共享資料時保證資料正確性的目的,卻無形中導致執行緒的併發性下降。執行緒從並行執行,變成了序列執行。與直接使用單程序無異...