3 minutos para completar la historia aprenden mecanismo de sincronización entre procesos de señales

Un hombre exitoso es aquel que puede sentar una base firme con los ladrillos que otros han tirado de él .-------- personas de éxito utilizarán otras personas pierden sus ladrillos para construir una base sólida.

1, Linux y cómo instalar la señal en el concepto de señal

Negro escribió un blog relacionado puede ser el destino:
https://blog.csdn.net/weixin_46027505/article/details/104530022

2, revisión de procesos múltiples

El siguiente es un blog de programación y procesos multi-proceso. Necesitamos saber puede ver:
https://blog.csdn.net/weixin_46027505/article/details/105141592

https://blog.csdn.net/weixin_46027505/article/details/104812719

3, la forma de lograr las señales de comunicación entre procesos

A continuación llevamos a cabo tal cosa con el siguiente fragmento de código:
Mi padre es el proceso padre, y yo soy proceso hijo negro.
Entonces un día, mi padre llegó a casa del trabajo, pero no tomó las llaves, y luego corriendo al baño, se ha llamando a la puerta, de hecho, la puerta estaba abierta, él no trató de abrir la puerta, (en nombre del proceso padre bloqueado afuera, no puede entrar en la casa en el inodoro)
, pero por desgracia esta vez las cosas que estaba escuchando música negro (en nombre de los niños querían hacer su propia cosa), y, finalmente, oí una canción, oí un golpe en la puerta de su padre con ganas sonido, me gritó en voz alta, "puerta abierta" (es decir, enviar una señal al proceso padre)
y, finalmente, el padre corrió al baño, cerró la puerta,
esta vez negro demasiado mal, sino también ir al baño, no han dejado de llamar a la puerta del baño, instando a mi padre que darse prisa para completa, este es el proceso hijo se bloquea, hasta que mi padre y yo terminado de hablar, puedo estar en el inodoro (mi padre me envió una señal),
y luego mi padre me llevó a ir a tiendas , esperando que yo después de ir al baño,
al final de la última historia.
Aquí Insertar imagen Descripción
Ahora nos damos cuenta el código:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>


int wc_door = 0;   //厕所门关着的意思
int home_door = 0;  //爸爸以为家里的门是关着的

//爸爸上完厕所后告诉儿子上完了,小黑就知道厕所的门可以开了
void sig_child(int sig_num)
{
    if( SIGUSR1 == sig_num ) 
    {
        wc_door = 1;   
    }
}


//小黑告诉爸爸门是开着的,爸爸就知道门可以开了
void sig_parent(int sig_num)
{
    if( SIGUSR2 == sig_num ) 
    {
        home_door = 1;   
    }
}



int main(int argc, char *argv[])
{    
    int             pid; 
    int             wstatus;

    signal(SIGUSR1, sig_child);   
    signal(SIGUSR2, sig_parent);  
    
    if( (pid=fork()) < 0 )   
    {       
        printf("Create child process failure: %s\n", strerror(errno));     
        return -2;   
    }    
    
    //下面是子进程空间
    else if(pid == 0)   
    {       
        printf("xiaohei is listening to music\n");
        sleep(5);//听歌5分钟,没有听到爸爸敲门
        printf("xiaohei finish listen music and tell father door is open\n");//听完
        kill(getppid(), SIGUSR2);  //大声喊,告诉爸爸门是开着的
        sleep(3);
        while( !wc_door )     
        {            
            printf("xiaohei ask father to la baba quickly\n");
            sleep(1);   
        }       
        printf("xiaohei finish la baba\n");        
        return 0;  
    }


    //下面是父进程空间
    printf("father start knock the door\n");    //爸爸开始敲门
    while( !home_door )      //但是不知道门是开着的就一直敲
    {      
        sleep(1);
    }
   
   //听到小黑的声音,然后开门上厕所
    printf("father start running to WC and la xiang\n"); 
    sleep(10); //上厕所的时间
    printf("father tell xiaohei can come in wc\n");//告诉小黑自己上完了
    kill(pid, SIGUSR1); ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200327150910227.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NjAyNzUwNQ==,size_16,color_FFFFFF,t_70#pic_center)
    printf("father wait me to go to shopping\n");
    wait(&wstatus);    
    printf("story over and we go to shopping\n");



    return 0;
}

Aquí Insertar imagen Descripción

Esto completa el proceso de problemas de sincronización entre el padre y el hijo.

Publicado 29 artículos originales · alabanza won 65 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_46027505/article/details/105143121
Recomendado
Clasificación