Linux線程同步之信號(hào)C語(yǔ)言實(shí)例
linux中向某個(gè)線程發(fā)送信號(hào),若沒(méi)有對(duì)該信號(hào)的處理函數(shù),則會(huì)導(dǎo)致程序結(jié)束。
如下面的程序,創(chuàng)建一個(gè)線程,主線程向其發(fā)送一個(gè)信號(hào),會(huì)導(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 通過(guò)等待信號(hào)來(lái)控制線程時(shí)應(yīng)添加一個(gè)信號(hào)處理函數(shù)來(lái)實(shí)現(xiàn)對(duì)線程的控制
改進(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);
}
部分效果
![]()
- golang 監(jiān)聽(tīng)服務(wù)的信號(hào),實(shí)現(xiàn)平滑啟動(dòng),linux信號(hào)說(shuō)明詳解
- Linux進(jìn)程間通信--使用信號(hào)
- 詳解Linux進(jìn)程間通信——使用信號(hào)量
- 詳解Linux多線程使用信號(hào)量同步
- Linux下的信號(hào)詳解及捕捉信號(hào)
- linux下基于C語(yǔ)言的信號(hào)編程實(shí)例
- linux多線程編程詳解教程(線程通過(guò)信號(hào)量實(shí)現(xiàn)通信代碼)
- Linux下semop等待信號(hào)時(shí)出現(xiàn)Interrupted System Call錯(cuò)誤(EINTR)解決方法
- 淺談Linux信號(hào)機(jī)制
相關(guān)文章
Qt使用windeployqt工具實(shí)現(xiàn)程序打包發(fā)布方法
本文主要介紹了Qt使用windeployqt工具實(shí)現(xiàn)程序打包發(fā)布方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
用C語(yǔ)言來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的虛擬機(jī)
這篇文章主要介紹了用C語(yǔ)言來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的虛擬機(jī),其中棧數(shù)組的部分非常值得學(xué)習(xí),需要的朋友可以參考下2015-07-07
如何寫(xiě)好C main函數(shù)的幾個(gè)注意事項(xiàng)
這篇文章主要介紹了如何寫(xiě)好C main函數(shù)的幾個(gè)注意事項(xiàng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
C語(yǔ)言實(shí)現(xiàn)經(jīng)典排序算法的示例代碼
C++分步實(shí)現(xiàn)職工管理系統(tǒng)詳解
Windows10配置VSCode C++環(huán)境(超詳細(xì),面向小白以及大佬們)

