Linux線程同步之信號C語言實(shí)例
linux中向某個(gè)線程發(fā)送信號,若沒有對該信號的處理函數(shù),則會導(dǎo)致程序結(jié)束。
如下面的程序,創(chuàng)建一個(gè)線程,主線程向其發(fā)送一個(gè)信號,會導(dǎo)致程序立即結(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í)應(yīng)添加一個(gè)信號處理函數(shù)來實(shí)現(xiàn)對線程的控制
改進(jì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); }
部分效果
相關(guān)文章
Qt使用windeployqt工具實(shí)現(xiàn)程序打包發(fā)布方法
本文主要介紹了Qt使用windeployqt工具實(shí)現(xiàn)程序打包發(fā)布方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11用C語言來實(shí)現(xiàn)一個(gè)簡單的虛擬機(jī)
這篇文章主要介紹了用C語言來實(shí)現(xiàn)一個(gè)簡單的虛擬機(jī),其中棧數(shù)組的部分非常值得學(xué)習(xí),需要的朋友可以參考下2015-07-07如何寫好C main函數(shù)的幾個(gè)注意事項(xiàng)
這篇文章主要介紹了如何寫好C main函數(shù)的幾個(gè)注意事項(xiàng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06

C語言實(shí)現(xiàn)經(jīng)典排序算法的示例代碼

C++分步實(shí)現(xiàn)職工管理系統(tǒng)詳解

Windows10配置VSCode C++環(huán)境(超詳細(xì),面向小白以及大佬們)