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
}
linux下进程间同步的机制有以下三种:记录锁(文件锁)
共享内存中的mutex
效率上 共享内存mutex >信号量 >记录锁
posix 提供了新的信号量 - 有名信号量,既可以使用在进程间同步也可以作为线程间同步的手段。效率比共享内存mutex要好一些
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)