Un identificatore univoco e costante per un thread pthreads?
-
20-08-2019 - |
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 ??
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*
inpthread_create
Vedi questa risposta per maggiori dettagli: Come assegnare ID univoci ai thread in un wrapper pthread?