zoukankan      html  css  js  c++  java
  • 进程同步

    #include "apue.h"

    static volatile sig_atomic_t sigflag; /* set nonzero by sig handler */
    static sigset_t newmask, oldmask, zeromask;

    static void
    sig_usr(int signo)   /* one signal handler for SIGUSR1 and SIGUSR2 */
    {
        sigflag = 1;
    }

    void
    TELL_WAIT(void)
    {
        if (signal(SIGUSR1, sig_usr) == SIG_ERR)
            err_sys("signal(SIGUSR1) error");
        if (signal(SIGUSR2, sig_usr) == SIG_ERR)
            err_sys("signal(SIGUSR2) error");
        sigemptyset(&zeromask);
        sigemptyset(&newmask);
        sigaddset(&newmask, SIGUSR1);
        sigaddset(&newmask, SIGUSR2);

        /*
         * Block SIGUSR1 and SIGUSR2, and save current signal mask.
         
    */
        if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)
            err_sys("SIG_BLOCK error");
    }

    void
    TELL_PARENT(pid_t pid)
    {
        kill(pid, SIGUSR2);              /* tell parent we're done */
    }

    void
    WAIT_PARENT(void)
    {
        while (sigflag == 0)
            sigsuspend(&zeromask);   /* and wait for parent */
        sigflag = 0;

        /*
         * Reset signal mask to original value.
         
    */
        if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)
            err_sys("SIG_SETMASK error");
    }

    void
    TELL_CHILD(pid_t pid)
    {
        kill(pid, SIGUSR1);             /* tell child we're done */
    }

    void
    WAIT_CHILD(void)
    {
        while (sigflag == 0)
            sigsuspend(&zeromask);  /* and wait for child */
        sigflag = 0;

        /*
         * Reset signal mask to original value.
         
    */
        if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)
            err_sys("SIG_SETMASK error");
    }
  • 相关阅读:
    ms sql server 2008 简体中文版
    华为交换机集群 介绍
    机房建设标准
    不能打开网页(QQ 微信能上)
    windows下office安装 遇到需要安装msxml 6.0
    Python module (一).psutil
    Python 2 和Python 3 win10 下同时安装 笔记
    windows_程序界面乱码
    IT人员应该掌握的30种技能
    H3C 维护命令
  • 原文地址:https://www.cnblogs.com/hbt19860104/p/2626401.html
Copyright © 2011-2022 走看看