Linux線程同步之信號C語言實例
更新時間:2015年04月27日 10:40:18 投稿:junjie
這篇文章主要介紹了Linux線程同步之信號C語言實例,本文直接給出代碼實例,需要的朋友可以參考下
linux中向某個線程發(fā)送信號,若沒有對該信號的處理函數(shù),則會導致程序結(jié)束。
如下面的程序,創(chuàng)建一個線程,主線程向其發(fā)送一個信號,會導致程序立即結(jié)束
#include <stdio.h> #include <pthread.h> pthread_t t; void* run(void* arg) { while(1) { printf("Hello\n"); } } main() { pthread_create(&t, 0, run, 0); pthread_kill(t,34); while(1); }
這就要求利用pthread_kill 與 sigwait 通過等待信號來控制線程時應添加一個信號處理函數(shù)來實現(xiàn)對線程的控制
改進后的控制線程程序
#include <stdio.h> #include <pthread.h> #include <signal.h> pthread_t t1, t2; sigset_t sigs; void handle(int s) { } void* r1(void* arg) { int s; while(1) { printf("1\n"); sigwait(&sigs, &s); } } void* r2(void* arg) { while(1) { sleep(1); printf("2\n"); pthread_kill(t1, 34); } } main() { signal(34, handle); sigemptyset(&sigs); sigaddset(&sigs, 34); pthread_create(&t1, 0, r1, 0); pthread_create(&t2, 0, r2, 0); while(1); }
部分效果
相關文章
Qt使用windeployqt工具實現(xiàn)程序打包發(fā)布方法
本文主要介紹了Qt使用windeployqt工具實現(xiàn)程序打包發(fā)布方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11

Windows10配置VSCode C++環(huán)境(超詳細,面向小白以及大佬們)
這篇文章主要介紹了Windows10配置VSCode C++環(huán)境(超詳細,面向小白以及大佬們),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
2019-12-12