文档章节

多线程中,(实时)信号(转载)

东湖畔新家
 东湖畔新家
发布于 2017/05/09 18:53
字数 136
阅读 1
收藏 0

#include <signal.h>
#include <pthread.h> 
#include <stdio.h>
  void intr(int sig,siginfo_t *info,void *context)
  {
          printf("caught by %d\n",pthread_self());
  }
 
 
 
    void * thread(void * arg)
    {
    //安装一个SIGINT信号处理
   
         struct sigaction st;
            sigemptyset(&st.sa_mask);
            st.sa_flags = SA_SIGINFO;
            st.sa_handler = intr;
            sigaction(SIGINT, &st, NULL);
                                  

          int ret ;
          while ( 1 )
         {
              ret = sleep(10);
              if(ret)
                      printf("interrupted\n");
             
        }
   }
  
   main()
   {
           pthread_t tid;
           sigset_t    mask,oldmask;
                setbuf(stdout,0);
           printf("parent is %d\n",pthread_self());
           pthread_create(&tid,0,thread,0);
    sigemptyset(&mask);
    sigaddset(&mask, SIGINT);
    if (pthread_sigmask(SIG_BLOCK, &mask, &oldmask))
        printf("SIG_BLOCK error\n");

    sleep(200)    ;
  }


请注意红色代码,要在主线程里面阻塞sigint,这样ctrl+c就会把信号发给子线程了

 

 

本文转载自:http://blog.csdn.net/sblig/article/details/24669749

共有 人打赏支持
东湖畔新家
粉丝 1
博文 170
码字总数 31582
作品 0
杭州
后端工程师
私信 提问
Linux 多线程应用中编写安全的信号处理函数

Linux 多线程应用中编写安全的信号处理函数 在 开发多线程应用时,开发人员一般都会考虑线程安全,会使用 pthread_mutex 去保护全局变量。如果应用中使用了信号,而且信号的产生不是因为 程序...

WuHonghai
2012/05/10
0
0
基于Swoole和Redis实现的并发队列处理系统

背景 由于PHP不支持多线程,但是作为一个完善的系统,有很多操作都是需要异步完成的。为了完成这些异步操作,我们做了一个基于Redis队列任务系统。 大家知道,一个消息队列处理系统主要分为两...

太阳黑子
2016/10/30
68
0
秒杀多线程第八篇 经典线程同步 信号量Semaphore

阅读本篇之前推荐阅读以下姊妹篇: 《秒杀多线程第四篇一个经典的多线程同步问题》 《秒杀多线程第五篇经典线程同步关键段CS》 《秒杀多线程第六篇经典线程同步事件Event》 《秒杀多线程第七...

晨曦之光
2012/05/21
116
0
秒杀多线程第八篇 经典线程同步 信号量Semaphore

阅读本篇之前推荐阅读以下姊妹篇: 《秒杀多线程第四篇一个经典的多线程同步问题》 《秒杀多线程第五篇经典线程同步关键段CS》 《秒杀多线程第六篇经典线程同步事件Event》 《秒杀多线程第七...

长平狐
2012/12/10
20
0
秒杀多线程第十二篇 多线程同步内功心法——PV操作上

阅读本篇之前推荐阅读以下姊妹篇: 《秒杀多线程第四篇一个经典的多线程同步问题》 《秒杀多线程第五篇经典线程同步关键段CS》 《秒杀多线程第六篇经典线程同步事件Event》 《秒杀多线程第七...

长平狐
2012/12/10
61
0

没有更多内容

加载失败,请刷新页面

加载更多

dockerfile 镜像构建(1)

通用dockerfile 利用已经编译好的.jar 来构建镜像。要构建的目录如下: [root@iZuf61quxhnlk9m2tkx16cZ demo_jar]# docker build -t demo:1 . 运行镜像: [root@iZuf61quxhnlk9m2tkx16cZ de...

Canaan_
54分钟前
2
0
Redis radix tree源码解析

Redis实现了不定长压缩前缀的radix tree,用在集群模式下存储slot对应的的所有key信息。本文将详述在Redis中如何实现radix tree。 核心数据结构 raxNode是radix tree的核心数据结构,其结构体...

阿里云云栖社区
57分钟前
12
0
vue import 传入变量

在做动态添加component的时候,传入变量就会报错,出现以下错误信息: vue-router.esm.js?fe87:1921 Error: Cannot find module '@/components/index'. at eval (eval at ./src/components ......

朝如青丝暮成雪
59分钟前
3
0
Flutter开发 Dio拦截器实现token验证过期的功能

前言: 之前分享过在Android中使用Retrofit实现token失效刷新的处理方案,现在Flutter项目也有“token验证过期”的需求,所以接下来我简单总结一下在Flutter项目中如何实现自动刷新token并重...

EmilyWu
今天
9
0
final Map可以修改内容,final 常量不能修改

1.final Map 可以put元素,但是不可以重新赋值 如: final Map map = new HashMap(); map = new HashMap();//不可以 因为栈中变量map引用地址不能修改 2.final str = “aa”; str = "bb";/......

qimh
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部