Ejemplo usando pthread_join
Hay dos formas de finalizar un hilo. Una es como el ejemplo siguiente. Cuando finaliza la función, el hilo que la llamó también finalizará; También debe tenerse en cuenta que un subproceso no puede ser esperado por varios subprocesos, es decir, un subproceso solo puede llamar a pthread_join una vez; de lo contrario, solo un subproceso regresará correctamente y los otros subprocesos devolverán errores de ESRCH.
En Linux, de forma predeterminada, después de crear un hilo, debe usar esta función para reciclar los recursos del hilo creado, pero puede configurar las propiedades del hilo para reciclar directamente los recursos del sistema ocupados por el hilo cuando el hilo termina. Consulte Propiedades del hilo para obtener más información.
Ejemplo:
//signaltest.c //El subproceso se bloquea, espera la señal y luego genera la cadena //El subproceso principal ingresa caracteres desde el teclado y envía una señal al subproceso. #include
// Si se ingresa a, el subproceso imprime hola y el hilo principal El programa continúa esperando entrada;
//Si se ingresa q, el programa principal espera a que finalice la subrutina. La subrutina imprime Dormiré 2 segundos (dormiré durante 2 segundos y saldré) y finaliza después de un retraso de dos segundos. Luego, las impresiones del hilo principal finalizan y el programa finaliza.
Mencionamos anteriormente que puede usar la función pthread_join() para permitir que el hilo principal se bloquee y espere a que salgan otros hilos, de modo que el hilo principal pueda limpiar el entorno de otros hilos. Pero también hay algunos subprocesos a los que les gusta limpiar ellos mismos el estado de salida y no quieren que el subproceso principal llame a pthread_join para esperarlos. Si configuramos las propiedades en NULL cuando llamamos a la función pthread_create(), significa que el hilo que queremos crear tiene propiedades predeterminadas y se puede unir. Si necesita establecer el atributo en separado, consulte el siguiente ejemplo: void* start_run(void*arg){/dosomework}intmain(){pthread_tthread_id;pthread_attr_tattr;pthread_attr_init(&attr);pthread_attr_ setdetachstate(&attr,PTHREAD_CREATE_DETACHED); pthread_create(&thread_id ,&attr,start_run,NULL);pthread_attr_destroy(&attr amp;attr);sleep(5);exit(0);} Después de configurar el hilo para que se pueda unir, puede llamar a pthread_detach() para separarlo, pero no se permite proceder a la operación contraria. Además, llamar a pthread_detach() después de que el hilo ya haya llamado a pthread_join() no tiene ningún efecto.