C Language
Multihilo
Buscar..
Introducción
En C11 hay una biblioteca de subprocesos estándar, <threads.h>
, pero no hay un compilador conocido que aún lo implemente. Por lo tanto, para usar los subprocesos múltiples en C, debe usar implementaciones específicas de la plataforma como la biblioteca de subprocesos POSIX (a menudo denominada pthreads) utilizando el encabezado pthread.h
.
Sintaxis
- thrd_t // Tipo de objeto completo definido por la implementación que identifica un hilo
- int thrd_create (thrd_t * thr, thrd_start_t func, void * arg); // crea un hilo
- int thrd_equal (thrd_t thr0, thrd_t thr1); // Verificar si los argumentos se refieren al mismo hilo.
- thr_t thrd_current (void); // Devuelve el identificador del hilo que lo llama
- int thrd_sleep (const struct timespec * duration, struct timespec * restante); // Suspender la ejecución del hilo de llamada por al menos un tiempo dado
- void thrd_yield (void); // Permitir que se ejecuten otros subprocesos en lugar del subproceso que lo llama
- _Noreturn void thrd_exit (int res); // Termina el hilo el hilo que lo llama
- int thrd_detatch (thrd_t thr; // separa un hilo dado del entorno actual
- int thrd_join (thrd_t thr, int * res); // Bloquea el hilo actual hasta que el hilo dado termine
Observaciones
El uso de subprocesos puede introducir un comportamiento adicional indefinido, como http://www.riptutorial.com/c/example/2622/data-race . Para el acceso sin carreras a las variables que se comparten entre los distintos subprocesos, C11 proporciona la funcionalidad de mtx_lock()
o el http://www.riptutorial.com/c/topic/4924/atomics y las funciones asociadas (opcional) en stdatomic.h
.
C11 hilos ejemplo simple
#include <threads.h>
#include <stdio.h>
int run(void *arg)
{
printf("Hello world of C11 threads.");
return 0;
}
int main(int argc, const char *argv[])
{
thrd_t thread;
int result;
thrd_create(&thread, run, NULL);
thrd_join(&thread, &result);
printf("Thread return %d at the end\n", result);
}
Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow