pthread_join () detallado y experimentos

pthread_join () prototipo de la función:

int pthread_join(pthread_t thread, void **retval);
args:
    pthread_t thread: 被连接线程的线程号
    void **retval : 指向一个指向被连接线程的返回码的指针的指针
return:
    线程连接的状态,0是成功,非0是失败

1. ¿Por qué utilizar pthread_join ()

En muchos casos, el hilo principal para crear e iniciar un hilo hijo, si el hilo hijo a una gran cantidad de operación que consume tiempo, a menudo antes de que el niño pase el hilo principal va a terminar, pero si el hilo principal ha terminado el acuerdo con otras cuestiones, la necesidad para hacer frente a los resultados de la sub-hilo, que es el principal hilo necesidades que esperar más tiempo después del final de la ejecución sub-hilo se completó, esta vez debemos utilizar pthread_join () método tiene.
Eso pthread_join acción () se puede entender: el principal de espera hilo de rosca terminador. Es decir, sub-subproceso llama pthread_join () Código del método atrás, y sólo hasta el final de la sub-hilo puede ejecutar.

Cuando un hilo de rosca llama B y pthread_join (), Un hilo se bloquea hasta que el extremo del hilo B, A hilo continuará la ejecución. Cuando pthread_join () devuelve la función, el subproceso de llamada se considera el final en el verdadero sentido, se libera su espacio de memoria (si el subproceso de llamada no es aislado). Aquí hay tres cosas que destacar:

  1. espacio de memoria liberada es sólo sistemas espaciales, debe borrar manualmente el espacio asignado al programa, como malloc (asignación de espacio).
    2. Un hilo sólo puede ser conectado a un hilo.
    3. Pase la conexión no debe ser aislado, o la conexión será incorrecto.
    Puede ser visto pthread_join () tiene dos efectos:

  2. Esperando que el otro extremo del hilo: Cuando se llama a pthread_join (), el subproceso actual se bloquea hasta que el extremo del hilo se llama, el subproceso actual reanuda la ejecución.

  3. Hilo recursos para reciclar: Si un hilo no es aislado (hilos creados por defecto son no aislada) y no utiliza pthread_join la rosca (), entonces después de que el extremo del hilo no libera su espacio de memoria, que puede conducir a este mensaje ha convertido en un "hilo zombi."

2. uso

tid pthread_t;
pthread_create (y tid, NULL, thread_run, NULL);
pthread_join (tid, NULL);
llamando al método pthread_join directamente después de la creación de un hilo en la línea.

3. Experimento Código

Se puede ver el efecto realizado por el código, lo sabemos:

#include "stdafx.h" 
#include <pthread.h> 
#include <stdio.h> 
#include <Windows.h> 
#pragma comment(lib, "pthreadVC2.lib") 

static int count = 0; 

void* thread_run(void* parm) 
{ 
for (int i=0;i<5;i++) 
{ 
count++; 
printf("The thread_run method count is = %d\n",count); 
Sleep(1000); 
} 
return NULL; 
} 

int main() 
{ 
pthread_t tid; 
pthread_create(&tid, NULL, thread_run,NULL); 
// 加入pthread_join后,主线程"main"会一直等待直到tid这个线程执行完毕自己才结束 
// 一般项目中需要子线程计算后的值就需要加join方法 
pthread_join(tid,NULL); 
// 如果没有join方法可以看看打印的顺序 
printf("The count is = %d\n",count); 
getchar(); 
return 0; 
}

Además, el método pthread_join () para imprimir:

Si el interior del método pthread_join () de la impresión comentado:

Se puede ver que, si no hay un método de aumento pthread_join (), hilo principal que ejecute directamente desde la izquierda, se agregan después de esperar ejecuta hilo sólo después de la ejecución de código.



 

Publicados 136 artículos originales · ganado elogios 71 · vistas 160 000 +

Supongo que te gusta

Origin blog.csdn.net/u012308586/article/details/104680338
Recomendado
Clasificación