Этот код неверен:
int *risultato=0;
...
pthread_join(t1, (void*) &risultato);
Прототип для pthread_join()
:
int pthread_join(pthread_t thread, void **value_ptr);
Обратите внимание, что это void **
. Это потому, что функция, используемая для запуска потока, возвращает void *
. Чтобы получить доступ к void *
, возвращенному функцией запуска потока, вам нужно передать адрес void *
, чтобы pthread_join()
мог заполнить значение:
void *risultato=0;
...
pthread_join(t1, &risultato);
Обратите внимание, что risultato
теперь является правильным void *
, и его адрес передается в pthread_join()
с помощью оператора &
address-of.
Чтобы вернуться к int
возвращаемому значению функции codice()
:
int *intPtr = ( int * ) risultato;
int value = *intPtr;