信号队列问题(我认为)

时间:2013-02-21 02:06:26

标签: c signals

我对使用信号和处理程序非常陌生。 我的任务是创建一个调度程序。 当我第一次运行一些基本程序时,它会向调度程序发送一个信号,以便将它添加到调度程序的队列中。然后程序自行停止,只有调度程序可以从现在开始/停止它。 我正在使用SIGRTMIN的sigqueue因为我被告知这些允许信号排队。这很重要,因为调度程序必须根据请求添加到调度程序列表的顺序为程序提供时间片。 我认为我的程序工作正常,除非我一次创建2个以上的基本类型程序。我猜测同时有太多的信号被发送到调度程序,这导致了奇怪的问题(即使信号应该排队......) 这是显而易见的,因为在查看程序运行时,它们完全不按顺序运行(例如看似随机的程序2,3,1,3,2),尽管每次重复相同的顺序......

以下是我的调度程序中的一些代码。

//setting up sigaction
struct sigaction sigact;
sigemptyset(&sigact.sa_mask);
sigaddset(&sigact.sa_mask, SIGRTMIN);
sigact.sa_flags = SA_SIGINFO;
sigact.sa_sigaction = sigHandler;
sigaction(SIGRTMIN, &sigact, NULL);

//the actual signal handler function
void sigHandler(int sigNum, siginfo_t *info, void *unused)
{
    if (sigNum == SIGRTMIN)
    {
        pid_t nextWorker = info->si_pid;
        insert_pid(&pid_q, nextWorker);
        fprintf(stdout, "PID: %d added to queue.\n", nextWorker);
        fflush(stdout);
    }
}

请帮我看看发生了什么! :)

0 个答案:

没有答案