Introducción a la programación rocm
Puedes consultarlo, debería ser casi lo mismo.
Primero, cómo crear un hilo
Archivo de encabezado usado
pthread.h
Semaphore
stdio .h
Cadena
Definir identificador de hilo
pthread_t
Crear hilo
pthread_create
Corresponde al segmento de programa que es función del hilo.
Problemas de atención
Asegúrese de 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, asegurando que el proceso nunca terminará.
2. Función de control de la concurrencia de subprocesos
Sem_t: tipo de señal.
Sem_init: señal de inicialización
Sem_wait: equivalente a la operación p.
Sem_post: equivalente a la operación v.
En tercer lugar, implementar el sistema prototipo
Temas de padre, madre, hijo e hija:
Hay un plato en la mesa y solo una lata de fruta. colocarse a la vez. El padre pone manzanas, la madre pone naranjas, el hijo espera las naranjas en el plato y la hija espera las manzanas en el plato. Implementado a través de operaciones P, V y procesos de tubo respectivamente.
Uno por hilo.
pthread_t padre; proceso padre
pthread_t madre; proceso madre
pthread_t hijo proceso hijo
pthread_t hijo proceso
>La placa se puede representar mediante una variable.
sem_t está vacío;
Cada hilo no lo hace solo una vez, se puede hacer infinitas o veces limitadas.
Utilice While(1) para controlar que cada hilo se repita infinitamente.
Información de salida sobre cada ejecución del hilo.
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
gcc hex.c -lpthread
Generar el archivo ejecutable predeterminado a.out
Intro. Comando /a.out para ejecutar.
Ver los resultados: La ejecución continua del programa muestra que
El padre puso una manzana.
La hija recibió una manzana.
Mamá puso una naranja.
Mi hijo compró una naranja.
Mamá puso una naranja.
Mi hijo compró una naranja.
………………..
4. Código fuente del programa
# include ltstdio.h gt
# include ltstring .h gt
# include ltsemaphore.h gt
# include ltpthread.h gt
sem_t vacío //Definir semáforo
sem _ t applefull
sem _ t orangefull
void * procf(void * arg)//hilo principal
{
while (1){
SEM _ wait(amp; vacío); //P operación
printf("s\n ", (char *)arg);
SEM_post(amp;apple full);//Operación V
Sleep(7);
}
}
void * procm(void * arg)//Hilo madre
{
while(1){
SEM _ wait(amp; vacío) ; p>
printf("s\n ", (char *)arg);
SEM_post(amp;naranja lleno);
dormir(3);
}
}
void * procs(void * arg)//hilo secundario
{
while(1 ){
SEM_wait(amp;naranja completo);
printf("s\n ", (char *)arg);
SEM_post(amp; vacío);
sleep(2);
}
}
void * procd (void * arg)//Subproceso demonio
{
mientras(1){
SEM_wait(y manzana llena);
printf("s\n ", (char *)arg);
SEM_post(amp;empty);
dormir(5);
}
}
main()
{
pthread_t padre; //Definir un 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, "El padre entra en una manzana. "); //Crear un hilo
pthread_create(amp; mother, NULL, procm, "Mamá entra en una naranja.");
pthread_create(amp; hija, NULL, procd , "La hija recibió una manzana.
");
pthread_create(amp; son, NULL, procs, "El hijo recibe una naranja.");
While(1){} //Bucle en espera p>
}