Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo programar en lenguaje C para implementar primitivas de creación, primitivas de cancelación, primitivas de bloqueo y primitivas de activación

Cómo programar en lenguaje C para implementar primitivas de creación, primitivas de cancelación, primitivas de bloqueo y primitivas de activación

A continuación, debería ser casi lo mismo

1 Cómo crear un hilo

Archivos de encabezado utilizados

(a)pthread. .h

p>

(b)semaphore.h

(c) stdio.h

(d)string.h

Definir identificación de hilo

pthread_t

Crear un hilo

pthread_create

Corresponde a una función como segmento de programa de un hilo

Problemas de atención

p>

Para garantizar que el proceso no finalice (agregue un bucle infinito después de crear el hilo)

Agregue una declaración While(1) al hilo, que es un bucle infinito, para asegurar que el proceso no termine.

2. Funciones que controlan la concurrencia de subprocesos

sem_t: Tipo de semáforo

sem_init: Inicializar semáforo

sem_wait: Equivalente a la operación P

sem_post: equivalente a operación V

3. Implementando el sistema prototipo

Preguntas para padre, madre, hijo e hija:

Hay un plato sobre la mesa y solo se puede colocar una fruta a la vez. El padre solo pone manzanas, la madre solo pone naranjas, un hijo está esperando para comerse las naranjas en el plato y la otra hija está esperando para comerse las manzanas en el plato.

Implementado usando operaciones P, V y monitores respectivamente

Cada uno corresponde a un hilo

pthread_t padre proceso

pthread_t madre proceso

pthread_t hijo; proceso hijo

pthread_t hija;

La placa se puede representar mediante una variable

sem_t vacía;

Cada subproceso no solo lo hace una vez, sino que puede realizar un bucle infinito o finito

Utilice While(1) para controlar que cada subproceso realice un bucle infinito

Muestre la información de qué subproceso se ejecuta cada vez

p>

printf("s\n", (char *)arg genera la información de ejecución del hilo correspondiente a través del parámetro arg

Método de compilación

p>

gcc hex.c -lpthread

Generar el archivo ejecutable predeterminado a.out

Ingrese el comando ./a.out para ejecutar

Ver los resultados: El programa se ejecuta continuamente y muestra el resultado

el padre ingresó una manzana.

la hija recibe una manzana.

la madre ingresó una naranja.

p>

el hijo recibe una naranja.

la madre ingresó una naranja.

el hijo recibe una naranja.

………………..

4. Código fuente del programa

#include lt;stdio.hgt;

#includelt;string.hgt;

#include lt ;semaphore.hgt;

#include lt; pthread.hgt;

sem_t vacío; //Definir semáforo

sem_t applefull;

sem_t orangefull;

void *procf( void *arg) //hilo padre

{

while(1){

sem_wait(amp; vacío); //P operación

printf("s\n", (char *)arg);

sem_post(amp; applefull); operación

sleep(7);

p>

}

}

void *procm(void *arg) //hilo madre

{

while( 1){

sem_wait(y vacío);

printf("s\n", ( char *)arg);

sem_post(amp; orangefull);

dormir(

3);

}

}

void *procs(void *arg) //hilo hijo

{

while(1){

sem_wait(amp;orangefull);

printf("s\n", (char *)arg);

sem_post(amp;empty);

sleep(2);

}

}

void *procd(void *arg ) //hilo hijo

{

while(1){

sem_wait(amp;applefull);

printf("s \n", (char *)arg);

sem_post(amp; vacío);

sleep(5);

}

}

main()

{

pthread_t padre; //Definir hilo

pthread_t madre;

pthread_t hijo;

pthread_t hija;

sem_init(amp; vacío, 0, 1); //Inicialización del semáforo

sem_init(amp; applefull, 0, 0);

sem_init(amp; orangefull, 0, 0);

pthread_create(amp; padre, NULL, procf, "padre ingresó una manzana."); /Crear hilo

pthread_create(amp; mother, NULL, procm, "la madre ingresó una naranja.");

pthread_create(amp; hija, NULL, procd, "la hija obtiene una apple.");

pthread_create(amp;son, NULL, procs, "hijo recibe una naranja.");

while(1){} //Espera en bucle< / p>

}

Además, hay compras de grupos de productos en el grupo de webmasters y los precios están garantizados