ChinaUnix.net
相关文章推荐:

sigwait

一直对于多线程中信号处理有些疑虑和疑问,不知如何实现,还是以现今的技术实现不了,例如,如果我想某个线程可以接受到某个信号,而其他线程则不能(不是指专用的信号处理线程),由于没有找到相关的方法来处理,所以就只能"委曲求全"使用sigwait集中式处理. 在信号处理程序中iusr1和iusr2本意是用来计数线程th_fn1和th_fn2处理了sig_usr1和sig_usr2这两个信号,但是这里做了无用功,所安装的信号处理被体现到了主线程中.或许我明白...

by fposkln - Linux文档专区 - 2009-04-01 20:40:43 阅读(787) 回复(0)

相关讨论

RT,我在看到第十三章单实例守护进程清单13-3时,其中提到一句“到达这一点时,SIGHUP信号仍被忽略,所以需恢复对该信号的系统默认处理方式,否则调用sigwait的线程绝不会见到该信号” 我有个疑问:sigwait() 提供了一种等待信号的到来,以串行的方式从信号队列中取出信号进行处理的机制。但是,信号的系统处理方式跟这个队列没有关系吧?而且从时间顺序上来说,应该是先通过未决队列判断是否获取信号,接着再看该信号有什么信号处...

sigwait信号处理函数

by vincentff7 - Linux环境编程 - 2011-08-26 22:40:42 阅读(2208) 回复(0)

工作中碰到的,原来用着没问题(用#if 1的代码),后来换了系统就有问题了。 用APUE 2nd的修改例子来说明:(#if 1是修改过的,#if 0是AUPE原来的) #include "./apue.h" #include pthread.h> #define err_exit(i, fmt, arg...) printf("%d" fmt, i, ##arg) #define err_sys(fmt, arg...) printf("%d" fmt, ##arg) int quitflag; /* set nonzero by thread */ sigset_t mask; #if 1 sigset_t oldmask; #endif pthread_mutex_...

by seawolf1979 - Linux文档专区 - 2007-01-08 17:02:13 阅读(1712) 回复(0)

sigwait我有好几个问题, 它的原型如下: [quote]sigwait(const sigset_t *restrict sed, int *restrict signop);[/quote] 首先是书上说signop作为返回值, 表示发送信号的数量, 但是书后面的例子是这么用的: [code] /* 省略了变量的声明, 错误处理 */ err = sigwait(&mask, &signo); switch(signo){ case SIGINT: /* 处理 */ case SIGQUIT: /* 处理 */ default: /* 处理 */ } [/code] 我就想不通了, signo在这...

by yylogo - C/C++ - 2011-09-21 14:43:06 阅读(4070) 回复(9)

这里请教一个问题,这里有两种代码: First:(.cpp代码) #include #include #include #include using namespace std; int signo = 30; void *threadF(void *arg){ int *pa = (int *)arg; sigset_t sigset; sigemptyset(&sigset); sigaddset(&sigset,SIGUSR1); sigprocmask(SIG_BLOCK,&sigset,NULL); cout<<"等待信号!"<

by lypdaydayup - C/C++ - 2009-03-19 09:46:21 阅读(1523) 回复(7)

我写了个很小的测试程序,尝试学习sigwait的用法,在RHEL6.3+GCC4.4下运行,如下:[code] #include #include #include #include #include #include void sig_fun(int signo){ printf("received signal=%d\n",signo); } void *func(void*) { printf("thread start\n"); sigset_t sigset; sigemptyset(&sigset); sigaddset(&sigset,SIGALRM); ...

by ejeker - Linux环境编程 - 2013-07-10 22:50:51 阅读(3616) 回复(9)

sigwaitinfo在调用setgid后会跳出来,返回Interrupted system call,很诡异,但是sigwait就不会。 请看代码: test2.c [code]#include #include #include #include #include void sig_handler(int signum) { printf("Receive signal. %d\n", signum); } void* sigmgr_thread() { sigset_t waitset, oset; int sig; int rc; ...

by wwdwwd - C/C++ - 2009-11-26 20:03:20 阅读(5377) 回复(4)

请问当在一个线程中用sigwait等待一个信号...而在此线程中还用signal将此信号与一个函数关联...那么当信号发生时..是否会调用signal所关联的函数.??????

by guminminjaychou - C/C++ - 2009-11-04 20:37:52 阅读(1725) 回复(0)

大家好. 看书看到sigwait()函数的解释 int sigwait(const sigset_t *restrict sigmask, int* restrict signo); sigwait函数一直阻塞直到*sigmask指定的任何一个信号被挂起为止,然后从挂起信号集中删除那个信号,并解除对它的阻塞。当sigwait返回时,从挂起信号集中删除的信号的个数被存储在signo指定的那个位置中。 在这里,信号被挂起是什么意思呢?被挂起不是被阻塞吧? 其中,书上对信号有这么一段描述: 信号是向进程发...

by new_learner - C/C++ - 2008-12-11 10:07:28 阅读(11395) 回复(12)

APUE上面说“如果信号集中的某个信号在sigwait调用的时候处于未决状态,那么sigwait将无阻塞地返回,在返回之前,sigwait将从进程中移除那些处于未决状态的信号” 我的问题是: 假设信号A和B都需要被wait捕获,但是A产生以后,由于线程调度原因,系统没有及时让信号处理线程调用sigwait,此时又来了B信号,接着才执行信号处理线程并调用sigwait,此时,sigwait将只能返回一个信号,那么返回哪一个信号?并且由于 “在返回之前,s...

by vincentff7 - Linux环境编程 - 2012-07-03 16:25:26 阅读(2108) 回复(1)

那位高手能帮忙,急。。。。。。。。。。在线等待。。谢谢!

by stephenzsh - C/C++ - 2004-12-15 17:09:30 阅读(557) 回复(0)