Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    pthread_self() valore strano

    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???

  2. #2
    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

  3. #3
    Originariamente inviato da Emulator ®
    Ciao, questa funzione la richiami all'interno di un thread?
    no, la richiama fuori da un thread... ;-)

  4. #4
    Come faccio a richiamarla fuori da un thread???

    scusami ma non ho capito la domanda...

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    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ì:

    codice:
    YuYevon@slackware:~$ cat /usr/include/bits/pthreadtypes.h | grep " pthread_t;"
    typedef unsigned long int pthread_t;
    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):

    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

  6. #6
    n conclusione, se usi %u come codice di formato ti ritroverai un intero senza segno...
    avevo cercato in giro e la solzuione che avevo trovato è praticamente la stessa

    Grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.