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
}
打个比方,你现在要做两件事,一件事是烧水,一件事是晾衣服。所谓的同步就是指:你必须等水烧开了再去晾衣服。所谓的异步就是指在烧水的过程中,你完全可以再去晾衣服。所以,引入异步机制其实就是为了提高效率。当然,有的时候,如果两件事之间有依赖性,那么就是无法异步的,比如烧水和喝水,这两件事是没法异步去做的。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)