#include <stdio.h> #include <pthread.h> #include <unistd.h> #define NUMERO 6 int contador; static void *saluda (void *); int main (void) { int i; pthread_t hilo[NUMERO]; for (i = 0; i < NUMERO ; i++) { sleep(1); pthread_create (&hilo[i],NULL,saluda,NULL); } for (i = 0; i < NUMERO ; i++) { pthread_join (hilo[i],NULL); } return 0; } static void *saluda (void *args) { contador += 1; printf ("Soy el thread %d y tengo el id %d\n",contador,(int) pthread_self()); return NULL; }
lunes, 6 de enero de 2020
Programa en C que genere 6 hilos y estos se identifiquen
Generemos un programa en lenguaje C que lance o genere 6 hilos y estos se identifiquen con un identificador.
Memoria compartida, semáforos y procesos
Generar una aplicación multiproceso controlada por un semáforo.
#include <stdio.h> #include <sys/ipc.h> #include <sys/sem.h> #include <sys/shm.h> #include <stdlib.h> #include <unistd.h> int main (void) { // 1. Generamos la estructura struct sembuf op; // 2. Memoria compartida int id_mem; int *var; if ((id_mem = shmget(IPC_PRIVATE,sizeof(int), IPC_CREAT | 0600)) == -1){ perror("shmget"); exit(1); } var = shmat(id_mem,0,0); (*var) = 0; // 3. Generación del semáforo int id_sem; if ((id_sem = semget(IPC_PRIVATE,1,0777)) == -1) { perror("semget"); exit(1); } // 4. Inicialización del semáforo semctl(id_sem,0,SETVAL,1); op.sem_num = 0; op.sem_flg = 0; // 5. Lanzamos los procesos fork() fork(); fork(); fork(); // 6. Pasamos los procesos por el semáforo for (int i = 0; i < 10 ; i++) { op.sem_op = -1; semop(id_sem,&op,1); (*var)++; printf ("El valor de var: %d \n",*var); op.sem_op = 1; semop(id_sem,&op,1); } // 7. Eliminamos la memoria compartida así como el semáforo semctl(id_sem,0,IPC_RMID); shmdt(var); shmctl(id_mem,IPC_RMID,0); return 0; }
Suscribirse a:
Entradas (Atom)