Sto scrivendo una libreria C che deve fork() durante l'inizializzazione. Pertanto, voglio affermare() che il codice dell'applicazione (che è al di fuori del mio controllo) chiama il mio codice di inizializzazione della libreria da un singolo contesto filettato (per evitare il ben noto problema "threads and fork don't mix"). Una volta che la mia libreria è stata inizializzata, è thread-safe (e si aspetta che il codice a livello di applicazione possa creare thread). Mi preoccupo solo di supportare i pthreads.pthreads: come far valere il codice viene eseguito in un contesto singolo thread
Sembra impossibile contare il numero di thread nello spazio del processo corrente utilizzando pthreads. Infatti, anche googletest implementa solo GetThreadCount() su Mac OS e QNX.
Dato che non riesco a contare i thread, è in qualche modo possibile che posso invece affermare un singolo contesto thread?
Chiarimento: Se possibile, vorrei evitare di utilizzare "/ proc" (non portabile), una dipendenza di libreria addizionale (come libproc) e wrapper pthread_create in stile LD_PRELOAD.
Chiarimento n. 2: Nel mio caso è necessario utilizzare più processi poiché gli addetti alla mia biblioteca sono relativamente pesanti (utilizzando il webkit) e potrebbero bloccarsi. Tuttavia, voglio che il processo originale sopravviva agli arresti anomali dei lavoratori.
So che la sua non è portatile, ma è un inizio: Su Linux, c'è [/ proc/self/stat] (http: //www.kernel.org/doc/man-pages/online/pages/man5/proc.5.html). – ArjunShankar
Che ne dite di "if (pthread_self()! = NULL) ..."? Scusate, non è utile se volete verificare che non ci siano ALTRI thread rispetto al primo, naturalmente. Scusate. Continuerò a pensare ... –
Su ulteriori indagini, non sono sicuro che ci sia un modo semplice per risolvere questo problema. Forse basta "documentarlo chiaramente e lasciare che l'utente soffra se non sta leggendo i documenti?" –