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