Las API de subprocesos de Windows y Solaris permiten que se cree un subproceso en estado "suspendido". El hilo solo comienza realmente cuando luego se "reanuda". Estoy acostumbrado a los hilos POSIX que no tienen este concepto, y estoy luchando para entender la motivación para ello. ¿Alguien puede sugerir por qué sería útil crear un hilo "suspendido"?¿Por qué querría comenzar un hilo "suspendido"?
Aquí hay un ejemplo ilustrativo simple. WinAPI me permite hacer esto:
t = CreateThread(NULL,0,func,NULL,CREATE_SUSPENDED,NULL);
// A. Thread not running, so do... something here?
ResumeThread(t);
// B. Thread running, so do something else.
El (simple) POSIX equivalente parece ser:
// A. Thread not running, so do... something here?
pthread_create(&t,NULL,func,NULL);
// B. Thread running, so do something else.
¿alguien tiene alguna ejemplos del mundo real en el que hemos sido capaces de hacer algo en el punto A (entre CreateThread & ResumeThread) ¿cuál hubiera sido difícil en POSIX?
Ah, claro, entiendo que usar CreateThread directamente no es realmente lo que se supone que se debe hacer desde C/C++ - no le da al C-Runtime la oportunidad de inicializar varias cosas de la limpieza. _beginthreadex debería usarse en su lugar (o eso es lo que leo) – Ragster
Implementar dicho mecanismo en POSIX no sería difícil. Tendría que usar simple pthread_cond_wait – adf88
@Ragster - gracias por la sugerencia. _beginthreadex() es de hecho la forma correcta de iniciar un hilo en Windows. –