Salve,
è possibile che un codice del tipo
int idthread = pthread_self();
printf("sono il thread %i\n", idthread);
mi restituisca
sono il thread -1219126384
cioè è normale un valore negativo???
Salve,
è possibile che un codice del tipo
int idthread = pthread_self();
printf("sono il thread %i\n", idthread);
mi restituisca
sono il thread -1219126384
cioè è normale un valore negativo???
Ciao, questa funzione la richiami all'interno di un thread?
Inoltre ti consiglio di leggere: http://publib.boulder.ibm.com/iserie...s/users_28.htm
CrystalSoft | Software House & Web Agency di WinRefine, Mercante in Fiera e altro...
Annunci Zoo | Annunci gratuiti per il mondo degli Animali
ElettroMercatino | Annunci a tema Informatico ed Elettronico
no, la richiama fuori da un thread... ;-)Originariamente inviato da Emulator ®
Ciao, questa funzione la richiami all'interno di un thread?
Come faccio a richiamarla fuori da un thread???
scusami ma non ho capito la domanda...
pthread_self restituisce un valore di tipo pthread_t. Che io sappia tale tipo di dato è definito in maniera diversa a seconda delle implementazioni della libreria, tant'è ad esempio che per confrontare questi valori la libreria fornisce la funzione pthread_equal(), proprio perché il tipo pthread_t non è sempre lo stesso e con questa funzione è possibile "fregarsene" di quale sia il suo tipo primitivo, confrontando due valori di tipo pthread_t in qualsiasi modo esso sia definito (ovviamente perché cambia anche l'implementazione della funzione stessa).
In molte implementazioni, comunque, pthread_t è definito come unsigned long int, e anche sulla Slackware 12.2 che ho ora sottomano è così:
quindi quel valore che hai stampato potrebbe essere appunto un "unsigned long int", solo che visto che hai usato il codice di formato %i (per gli interi con segno) ti ritrovi appunto un numero con il segno, che per caso è -. Il fatto è che in memoria non esistono numeri positivi o negativi, esistono solo dei bit (o per andare ancora più a basso livello "voltaggi diversi"), ed è il modo in cui chiediamo di farci stampare questi bit che stabilisce se un numero è negativo o positivo. Nella fattispecie di un intero negativo/positivo, il punto è che la rappresentazione binaria di un numero intero è in "segno e modulo", cioè il primo bit rappresenta il segno (convenzionalmente 1 sta per - e 0 per +) e gli altri 8-1, 16-1, 32-1 o 64-1 rappresentano il "modulo", ossia il valore numerico "assoluto" dal segno. Quindi se in memoria una variabile ha questa rappresentazione binaria (su 8 bit):codice:YuYevon@slackware:~$ cat /usr/include/bits/pthreadtypes.h | grep " pthread_t;" typedef unsigned long int pthread_t;
10010100
il primo 1 significherà un - davanti al numero se questo viene stampato come intero con segno, e un bit come tutti gli altri (il più significativo) se viene richiesta la stampa senza segno, quindi i risultati possibili sono -20 (con segno) e 148 (senza segno).
In conclusione, se usi %u come codice di formato ti ritroverai un intero senza segno...
Se non ricordo male, comunque, pthread_t può essere anche di tipo "puntatore a non-ricordo-cosa"... quindi nel dubbio controlla la definizione del tipo data nella libreria pthread che hai sul tuo sistema.
every day above ground is a good one
avevo cercato in giro e la solzuione che avevo trovato è praticamente la stessan conclusione, se usi %u come codice di formato ti ritroverai un intero senza segno...
Grazie mille