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
}
同步和异步的区别:1、同步就是说多个任务之间是有先后关系的,一个任务需要等待另一个任务执行完毕才能继续执行。
2、异步就是说多个任务之间没有先后关系,不需要相互等待各做各的事。
同步编程方法:
1、信号量
2、互斥量
异步无需考虑资源冲突,不需特别处理。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)