suma sincronizar pthread_join pthread_exit pthread_create numeros hilos ejercicios con c gdb pthreads

sincronizar - pthread_t a gdb hilo id



suma con hilos en c (2)

El valor de pthread_t no es el mismo que el ID de subproceso dependiente del sistema de ese hilo (en Linux gettid(2) ) que se ve en GDB.

AFAIK, no hay ninguna función para convertir entre los dos. Necesitas hacer un seguimiento de eso tú mismo.

¿Alguien sabe una manera de pasar de pthread_t a lo que GDB muestra con hilos de información?

Así que tengo:

(gdb) info threads 37 Thread 22887 0xb7704422 in __kernel_vsyscall () 36 Thread 22926 0xb7704422 in __kernel_vsyscall () 35 Thread 22925 0xb7704422 in __kernel_vsyscall () 34 Thread 22924 0xb7704422 in __kernel_vsyscall () 33 Thread 22922 0xb7704422 in __kernel_vsyscall () 32 Thread 22921 0xb7704422 in __kernel_vsyscall () (gdb) p m_messageQueue->m_creationThread $3 = 2694822768 (gdb) p/x m_messageQueue->m_creationThread $4 = 0xa09fbb70

¿Alguien sabe cómo entiendo qué hilo es este? Parecería ser 22768, pero ninguno de mis hilos es tan bajo.


Las nuevas versiones de GDB realmente generan el valor de pthread_t en el info thread , lo que hace que la asociación de pthread_t con el número de hilo sea trivial.

Por ejemplo, utilizando GDB 7.0 :

cat t.c #include <pthread.h> void *fn(void *p) { sleep(180); } int main() { pthread_t pth1, pth2; pthread_create(&pth1, 0, fn, 0); pthread_create(&pth2, 0, fn, 0); pthread_join(pth1, 0); return 0; } gcc -g -m32 -pthread t.c && gdb -q ../a.out (gdb) r [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib64/libthread_db.so.1". [New Thread 0xf7e56b90 (LWP 25343)] [New Thread 0xf7655b90 (LWP 25344)] Program received signal SIGINT, Interrupt. 0xffffe405 in __kernel_vsyscall () (gdb) info thread 3 Thread 0xf7655b90 (LWP 25344) 0xffffe405 in __kernel_vsyscall () 2 Thread 0xf7e56b90 (LWP 25343) 0xffffe405 in __kernel_vsyscall () * 1 Thread 0xf7e576b0 (LWP 25338) 0xffffe405 in __kernel_vsyscall () (gdb) up 2 #2 0x080484e2 in main () at t.c:13 13 pthread_join(pth1, 0); (gdb) p/x pth1 $1 = 0xf7e56b90 ## this is thread #2 above (gdb) p/x pth2 $2 = 0xf7655b90 ## this is thread #3 above