Domanda

Ho presunto che un pthread_t rimanga costante - per un dato filo - per tutta la sua vita, ma la mia sperimentazione sembra dimostrare che questa ipotesi sia falsa. Se l'id per un determinato thread non rimane costante per tutta la sua durata, come posso memorizzare un pthread_join in modo che un altro thread possa usare <=> per bloccare fino al termine del thread?

Per altri motivi mi sarebbe utile sapere come ottenere un identificatore univoco per un thread che posso convertire avanti e indietro in <=>. C'è un modo per farlo?

Ci sono molte informazioni fantastiche là fuori, ma ho avuto difficoltà a trovare risposte utili a queste domande. Gradirei qualsiasi aiuto / consiglio che posso ottenere!

modifica: Inoltre, non sono sicuro del perché, ma tutto sembra funzionare come previsto quando si aggiunge sleep (1) e si dorme per 1 secondo nella parte anteriore di ogni nuovo thread (all'interno della funzione del thread). Questo probabilmente sta afferrando come cannucce, ma <=> i valori potrebbero cambiare momentaneamente all'inizio di un nuovo thread o qualcosa del genere ??

È stato utile?

Soluzione

Non puoi fare affidamento sul fatto che pthread_t sia univoco, ma puoi utilizzare pthread_equal() per determinare se due ID thread si riferiscono allo stesso thread.

NAME
     pthread_equal -- compare thread IDs

SYNOPSIS
     #include <pthread.h>

     int
     pthread_equal(pthread_t t1, pthread_t t2);

DESCRIPTION
     The pthread_equal() function compares the thread IDs t1 and t2.

RETURN VALUES
     The pthread_equal() function will return non-zero if the thread IDs t1 and t2
     correspond to the same thread. Otherwise, it will return zero.

Altri suggerimenti

  

Un identificatore univoco e costante per un thread pthreads?

Per garantire che ogni thread che inizi possa essere identificato in modo univoco:

  • Usa un contatore che aumenta monotonicamente
  • Assegna il contatore a void* in pthread_create

Vedi questa risposta per maggiori dettagli: Come assegnare ID univoci ai thread in un wrapper pthread?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top