C 使用信号和暂停同步子父级

C 使用信号和暂停同步子父级,c,signals,wait,kill,pause,C,Signals,Wait,Kill,Pause,我正在玩一些c代码,试图让一系列子进程执行一些异步工作,然后执行一些同步工作 家长负责组织孩子的同步性 以下是代码中的一般思想: #define CHILDREN 5 void myHandle(int d) {} int main () { int i; int pid[CHILDREN]; signal(SIGUSR1, myHandle); for(i = 0 ; i < CHILDREN ; i++ ){ pid[i] = for

我正在玩一些c代码,试图让一系列子进程执行一些异步工作,然后执行一些同步工作

家长负责组织孩子的同步性

以下是代码中的一般思想:

#define CHILDREN 5

void myHandle(int d) {}

int main () {
    int i;
    int pid[CHILDREN];
    signal(SIGUSR1, myHandle);
    for(i = 0 ; i < CHILDREN ; i++ ){
        pid[i] = fork();
        if (pid[i] == 0 ){

            // DO SOME ASYNCHRONOUS WORK

            // tell my parent I am done:
            kill(getppid(), SIGUSR1); 

            // wait for parent to wake me up.
            pause();

            // DO SOME SYNCHRONOUS WORK

            //wake parent back up.
            kill(getppid() , SIGUSR1);

            exit(1);
        }
    }

    // Wait for all children to finish async work:
    for (i = 0 ; i < CHILDREN ; i++) {
        pause(); // ISSUE IS HERE
    }

    // wake children back up in order:
    for (i = 0 ; i < CHILDREN ; i++ ) {
        kill(pid[i], SIGUSR1);
        // wait for child to finish work.
        pause();
    }

    return 0;
}
#定义子项5
void myHandle(int d){}
int main(){
int i;
int-pid[儿童];
信号(SIGUSR1,myHandle);
对于(i=0;i
这段代码实际上是有效的(大部分时间)。问题在于父循环在for循环中暂停。在某些情况下,多个子节点同时完成异步工作,导致许多对父节点的kill调用。循环的迭代速度不足以使父循环在所有kill调用中都处于暂停状态,从而导致程序在没有接收到信号的暂停上卡住


任何帮助或建议都会很好-谢谢大家

一个可能的解决方案是在主函数中有一个大小子函数数组。当一个子元素完成时,在数组的元素中放入一个值。然后父亲只需检查数组中的所有标志是否都已打开


这样,孩子之间就不会有写冲突,因为他们每个人都有自己的区域

唯一的问题是,父亲需要处于活动等待状态,不断检查标志是否亮起。然而,在您的解决方案中,pause()使其成为被动等待。我将在循环中使用sleep,这样就不会“太”忙这里有一个问题->父级无法看到子级的数组,它们有同一数组的两个不同副本。哦,是的,内存是复制的,而不是共享的。然后,您可以查看创建共享文件的mmap函数。因此,子对象将在同一数组上工作。另一种更重的可能性是使用pthread库而不是fork()生成线程。线程确实共享内存。