Linux异步信号

Linux异步信号

1.int pthread_kill(pthread_t threadid, intsigno);

向特定的线程发送信号signo

2.int pthread_sigmask(int how, const sigset_t*newmask, sigset_t *oldmask);

设置线程的信号屏蔽码

3.int sigwait(const sigset_t *set, int *sig);

阻塞线程,等待set中指定的信号之一到达,并将到达的信号存入*sig

4.代码

#include <stdio.h>

#include <stdlib.h>

#include <pthread.h>

#include <signal.h>

//#define SIGUSRR  40;

int SIGUSRR = 40;

void* threadOne(void *arg)

{

       sigset_tsigset;

       intsigno;

       sigemptyset(&sigset);

       sigaddset(&sigset,SIGUSRR);

       pthread_sigmask(SIG_BLOCK,&sigset, NULL);

       while(1)

       {

              sigwait(&sigset,&signo);

              printf("getthread cond sig!\n");

       }     

}

int main(int argc, char **argv)

{

       if(argc != 1)

       {

              printf("Usage:\n");

              printf("threadcond\n");

              return1;

       }     

       pthread_tthreadId;

       if(pthread_create(&threadId,NULL, threadOne, NULL) != 0)

       {

              printf("threadcreate error! \n");

              return1;

       }     

       //structsigaction act;

       //act.sa_handler=SIG_IGN;

       //sigemptyset(&act.sa_mask);

       //act.sa_flags=0;

       //sigaction(SIGUSRR,&act,0);//设置信号SIGUSR1的处理方式忽略

       usleep(1000000);

       pthread_kill(threadId,SIGUSRR);

       usleep(1000000);

       pthread_kill(threadId,SIGUSRR);

       usleep(2000000);

       return0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值