2008-09-11 21 views
43

He utilizado fork() en C para iniciar otro proceso. ¿Cómo comienzo un nuevo hilo?¿Cómo comienzo los hilos en C simple?

+0

Depende de la plataforma. Aquí le mostramos cómo hacerlo en Windows: [http://msdn.microsoft.com/en-us/library/ms682453.aspx](http://msdn.microsoft.com/en-us/library/ms682453.aspx) –

+0

Como se explica en la documentación de CreateThread a la que se ha vinculado, si el programa usa la biblioteca C runtime, se debe usar _beginthreadex, no CreateThread. – ChrisN

+0

Gracias, no me había dado cuenta. ¿Cómo sabes si estás usando el CRT? Pensé que todo lo usaba. –

Respuesta

50

Como mencionaste fork() supongo que estás en un sistema tipo Unix, en cuyo caso POSIX threads (generalmente referido como pthreads) es lo que quieres usar.

Específicamente, pthread_create() es la función que necesita para crear un nuevo hilo. Sus argumentos son:

int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * 
    (*start_routine)(void *), void * arg); 

El primer argumento es el puntero devuelto a la identificación del hilo. El segundo argumento son los argumentos de subprocesos, que pueden ser NULL a menos que desee iniciar el subproceso con una prioridad específica. El tercer argumento es la función ejecutada por el hilo. El cuarto argumento es el único argumento que se pasa a la función de subprocesos cuando se ejecuta.

+8

Aquí hay un ejemplo sobre cómo usarlo: http://timmurphy.org/2010/05/04/pthreads-in-ca-minimal-working-example/ – tremendows

+1

Los hilos POSIX no cuentan como "C simple" ahora que el C11 estándar los define? – Hydronium

+0

Si bien la API multiproceso C11 está muy influenciada por los hilos POSIX, no son idénticos. Por lo tanto, no me parece correcto decir que los hilos POSIX son "simples C". –

2

Mira la biblioteca pthread (rosca de POSIX).

12

AFAIK, ANSI C no define el subprocesamiento, pero hay varias bibliotecas disponibles.

Si está ejecutando en Windows, enlace a msvcrt y use _beginthread o _beginthreadex.

Si está ejecutando en otras plataformas, eche un vistazo a la biblioteca pthreads (estoy seguro de que hay otras también).

8

Los subprocesos no forman parte del estándar C, por lo que la única forma de usar subprocesos es utilizar alguna biblioteca (por ejemplo: subprocesos POSIX en Unix/Linux, _beginthread/_beginthreadex si desea usar el C-runtime de ese subproceso o simplemente CreateThread Win32 API)