PDA

View Full Version : [C] cast void**


Epitolo
13-07-2015, 16:39
Ciao ragazzi...
non riesco a capire il funzionamento del void** implementato qui sotto, se riusciste a darmi dei chiarimenti ve ne sarei molto grato.
pthread_join(tid[r * N + c], (void **)&results[r * N + c]);

sottovento
13-07-2015, 16:59
La pthread_join() permette di fermare l'esecuzione del thread che la invoca fino a quando il thread specificato dal primo parametro termina la sua esecuzione.
Una volta che un thread termina l'esecuzione ha la possibilita' di ritornare un valore, e questo viene reso disponibile nel secondo parametro.
Questo se tutto va bene (i.e. pthread_join() ritorna 0); altrimenti verra' ritornato un codice di errore.

I parametri sono abbastanza semplici:
- il primo e' il numero che identifica il thread del quale attendere la terminazione. Nel tuo caso e' tid[r * N + c]. Apparentemente tid e' un vettore di ID. L'espressione fra quadre e' la tipica espressione per "linearizzare" una matrice, vale a dire: logicamente i thread sono posti in una matrice (tipicamente N x N, o cmq con N colonne) ma risulta piu' facile memorizzarli in un vettore, una riga dopo l'altra ed accederci con quell'espressione;
- Stesso gioco sul secondo parametro: il vettore results deve memorizzare i risultati dell'elaborazione del corrispondente thread. L'espressione (void **) e' solo un casting, vale a dire il programmatore segnala al compilatore che e' consapevole che il tipo del parametro richiesto per la pthread_join() e' proprio (void **).

Epitolo
13-07-2015, 21:47
Forse non sono stato chiaro io 😔 il funzionamento pthread_join() mi era già chiaro ma io volevo capire void** che cosa fa cioè void* so cosa fa ma void** non riesco proprio a capire che cast faccia..

Ps. Grazie comunque della risposta 👊

sottovento
13-07-2015, 22:35
E' un cast, esattamente come (void *). Siccome il tipo richiesto e' (void **) viene fatto il cast a quel tipo