您的位置:首页 > 运维架构 > Linux

Linux异步信号

2015-11-02 17:01 549 查看
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: