返回信息流问题环境:pthread编程,使用信号量同步,发现程序运行一天左右总是core dump,经过调试发现是信号量的问题。
描述:sem_wait()偶尔会没有阻塞。
后来发现程序其他地方的信号机制会影响到信号量的使用,后来写了一小段测试代码
贴测试代码:
static sem_t mysem;
static void sig_usr(int signo)
{
if (signo == SIGALRM)
printf("recvied SIGALRM\n");
}
int main(void)
{
struct sigaction tact;
sigset_t mask, oldmask;
sigemptyset(&mask);
sigaddset(&mask, SIGALRM);
sigprocmask(SIG_BLOCK, &mask, &oldmask);
tact.sa_handler = &sig_usr;
tact.sa_flags = 0;
tact.sa_mask = mask;
sigaction(SIGALRM, &tact, NULL);
sigprocmask(SIG_SETMASK, &oldmask, NULL);
sem_init(&mysem, 0, 0);
for(;;){
sem_wait(&mysem);
printf("After wait, mysem value %ld \n", mysem.__align);
sem_wait(&mysem);
}
}
用kill -SIGALRM (pid)把信号传给程序的时候,居然可以打印出来信息,百发百中……不解
希望对信号或者信号量熟悉的童鞋给一些了解此问题的建议
谢谢啦
这是一条镜像帖。来源:北邮人论坛 / cpp / #27640同步于 2009/8/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[求助]关于sem_wait
myou
2009/8/27镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。