2009-08-29 26 views
24

L'intestazione di funzione per pthread_create simile a questa:Perché start_routine per il ritorno pthread_create void * e prendere void *

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

ho capito tutti tranne che il puntatore a funzione per start_routine è della forma void* (*fpointer) (void*) che significa che prende in un puntatore nulloe restituisce un vuoto puntatore.

Il puntatore vuoto che serve è solo un modo per passare un argomento a start_routine, ottengo quella parte, ma non capisco perché la funzione restituisca un puntatore void? Quale codice noterà anche quel puntatore vuoto?

risposta

27

Dalla documentazione per pthread_create:

Il filo è creato eseguendo start_routine con arg come unico argomento. Se restituisce start_routine, l'effetto è come se ci fosse una chiamata implicita a pthread_exit() usando il valore di ritorno di start_routine come stato di uscita. Si noti che il thread in cui main() è stato originariamente invocato differisce da questo. Quando ritorna da main(), l'effetto è come se ci fosse una chiamata implicita a exit() usando il valore di ritorno di main() come stato di uscita.

E pthread_exit:

Il pthread_exit() funzione termina il thread chiamante e rende il value_ptr valore disponibile per qualsiasi successo unirsi con il filo di terminazione.

Quindi, se si esegue un pthread_join su un thread, il puntatore restituito viene passato nuovamente al thread di collegamento, consentendo di trasmettere informazioni dal thread di morte a un altro thread di thread.

7

Dal spec:

Se i start_routine ritorna, l'effetto è come se ci fosse un implicito chiamata al pthread_exit() utilizzando il valore ritorno del start_routine come stato uscita.

Problemi correlati