Thread en c (POSIX)
Los hilos son diferentes tipos de programas o ejecuciones de maneras continuas dentro de un mismo programa , ya sea en lenguaje java, python o en este caso "c".
Existen hoy en día diferentes tipos de implementación de los thread en concurrencia o programas en paralelismo.
Se puede utilizar una librería llamada <pthread.h> para utilizar estos importantes recursos llamados thread. En el caso de se se puede utilizar los hilos para que en un solo programa, correr múltiples métodos al mismo tiempo y controlar mas eficientemente los recursos.
Para declarar los thread en c se pone de la siguiente manera:
phtread_t thread1
Para poder correr los thread es parecido en java solo ponemos lo siguiente:
pthread_create(&thread,NULL,hilo,NULL);
Posteriormente se declaran los métodos en donde irán los procesos que realizaran los hilos:
void * hilo()
{
while(1)
{
}
}
Es aquí dentro del loop infinito lo que hará el hilo
pthread_join(thread,NULL)
Libreras útiles en "c" para uso de thread
<semaphore.h> //librería estilo semáforo
Esta librería ayuda para hacer esperar un thread a otro que termine de ejecutarse o detenerlos simultáneamente. Se puede iniciar el semáforo con lo siguiente:
sem_post(variable)
E indicar al otro thread que inicie si ejecución o hacer esperar el thread:
sem_wait(variable)
A continuacion un ejemplo de un programa en c con hilos:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <pthread.h> //libreria de thread | |
#include <semaphore.h> //libreria estilo semaforo | |
#include <stdlib.h> | |
char n[1024]; | |
sem_t sema; | |
void * escri() | |
{ | |
while(1){ | |
printf("Dime algo: "); | |
scanf("%s",n); | |
sem_post(&sema); //iniciar semaforo | |
} | |
} | |
void * mostrar() | |
{ | |
while(1){ | |
sem_wait(&sema); | |
printf("lo que me dijiste es: "); | |
printf("esto: %s\n",n); | |
} | |
} | |
int main() | |
{ | |
//int status; | |
pthread_t hilo1, hilo2; | |
pthread_create(&hilo1,NULL,escri,NULL); | |
pthread_create(&hilo2,NULL,mostrar,NULL); | |
pthread_join(hilo1,NULL); | |
pthread_join(hilo2,NULL); | |
return 0; | |
-UU-:----F1 threadl.c Top L36 (C/l Abbrev)---------------------------------------------------------------------------------------------------- |
Bien. Ahora que jala el Wiki otra vez, por favor agrega esto ahí. Van 5+5.
ResponderEliminarok :)
ResponderEliminar