thread pthread_create ejemplo c++ pthreads

pthread_create - thread c++ ejemplo



Pthread simple! C++ (6)

Al compilar con G ++, recuerde colocar el indicador -lpthread :)

No tengo idea de por qué esto no funciona.

#include <iostream> #include <pthread.h> using namespace std; void *print_message(){ cout << "Threading/n"; } int main() { pthread_t t1; pthread_create(&t1, NULL, &print_message, NULL); cout << "Hello"; return 0; }

El error:

[Descripción, Recurso, Ruta, Ubicación, Tipo] inicializando el argumento 3 de ''int pthread_create (pthread_t *, const pthread_attr_t *, void * (*) (void *), void *)'' threading.cpp threading / src line 24 C / Problema de C ++


Debes declarar el hilo principal como:

void* print_message(void*) // takes one parameter, unnamed if you aren''t using it


Desde el prototipo de la función pthread:

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

La función pasada a pthread_create debe tener un prototipo de

void* name(void *arg)


Enlace. Prueba esto:

extern "C" void *print_message() {...


Esto funcionó para mí:

#include <iostream> #include <pthread.h> using namespace std; void* print_message(void*) { cout << "Threading/n"; } int main() { pthread_t t1; pthread_create(&t1, NULL, &print_message, NULL); cout << "Hello"; // Optional. void* result; pthread_join(t1,&result); // :~ return 0; }


Porque el hilo principal sale.

Pon un sueño en el hilo principal.

cout << "Hello"; sleep(1); return 0;

El estándar POSIX no especifica lo que sucede cuando el hilo principal sale.
Pero en la mayoría de las implementaciones, esto hará que todos los hilos generados mueran.

Así que en el hilo principal debes esperar a que el hilo se muera antes de salir. En este caso, la solución más simple es simplemente dormir y darle al otro hilo la oportunidad de ejecutar. En código real usarías pthread_join ();

#include <iostream> #include <pthread.h> using namespace std; #if defined(__cplusplus) extern "C" #endif void *print_message(void*) { cout << "Threading/n"; } int main() { pthread_t t1; pthread_create(&t1, NULL, &print_message, NULL); cout << "Hello"; void* result; pthread_join(t1,&result); return 0; }