#include #include #include #include typedef struct { int a; char * msg; } thread_parameter_t; typedef struct { int b; char * buffer; } thread_result_t; void * thread_entry_point(void * arg) { printf("[thread] ok!\n"); thread_parameter_t * param = arg; printf("[thread] param->a = %d\n", param->a); printf("[thread] param->msg = %s\n", param->msg); printf("[thread] bye\n"); return "prova di risultato da thread\n"; //return NULL; } pthread_t t3; void * thread_entry_point_3(void * arg) { printf("[thread3] inizio\n"); sleep(2); printf("[thread3] fine\n"); return NULL; } void * thread_entry_point_2(void * arg) { printf("[thread2] ok!\n"); thread_parameter_t * param = arg; printf("[thread2] param->a = %d\n", param->a); printf("[thread2] param->msg = %s\n", param->msg); printf("[thread2] bye\n"); // t2 fa questo: // crea un thread t3 // mail join su t3 verrĂ  fatto dal main thread // quindi main thread deve avere accesso al thread id di t3 int res; res = pthread_create(&t3, NULL, thread_entry_point_3, NULL ); if (res != 0) { perror("pthread_create"); exit(1); } thread_result_t * result = malloc(sizeof(thread_result_t)); if (result == NULL) { perror("malloc"); exit(1); } result->b = 4321; result->buffer = "ok!"; pthread_exit(result); // equivalente a : // return result; //return "prova di risultato da thread\n"; //return NULL; } int main() { pthread_t t1; pthread_t t2; int res; thread_parameter_t param; param.a = 1234; param.msg = "ciao!"; res = pthread_create(&t1, NULL, thread_entry_point, ¶m ); if (res != 0) { perror("pthread_create"); exit(1); } res = pthread_create(&t2, NULL, thread_entry_point_2, ¶m ); if (res != 0) { perror("pthread_create"); exit(1); } printf("[main] thread ID del main thread = %ld\n", pthread_self()); printf("[main] Thread ID del thread t1 = %ld\n", t1); printf("[main] Thread ID del thread t2 = %ld\n", t2); //sleep(1); void * thread_result; printf("[main] prima di pthread_join su t1\n"); res = pthread_join(t1, &thread_result); if (res != 0) { perror("pthread_join"); exit(1); } thread_result_t * thread_result_2; printf("[main] prima di pthread_join su t2\n"); res = pthread_join(t2, &thread_result_2); if (res != 0) { perror("pthread_join"); exit(1); } printf("[main] prima di pthread_join su t3\n"); res = pthread_join(t3, NULL); if (res != 0) { perror("pthread_join"); exit(1); } printf("risultato del thread t1: %s\n", (char *) thread_result); printf("risultato del thread t2: %d\n", thread_result_2->b); printf("risultato del thread t2: %s\n", thread_result_2->buffer); printf("[main] bye\n"); return 0; }