Hi, Oleksandr! On Sep 14, Oleksandr Byelkin wrote:
Don't match OS name please, better use
#ifdef HAVE_SYS_SYSCALL_H #include <sys/syscall.h> #endif ... #ifdef __NR_gettid ... #endif Are there way to check that it has thread ID syscall particulary (I am afraid that most OSes has syscall)?
That's why you put the code inside #ifdef __NR_gettid ... #endif
diff --git a/sql/sql_class.cc b/sql/sql_class.cc index bf161b2..20c03fe 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -2062,6 +2068,13 @@ bool THD::store_globals() This allows us to move THD to different threads if needed. */ mysys_var->id= thread_id; +#ifdef HAVE_TID_SYSCALL + os_pid= getpid(); why would you want to have pid there? isn't it the same for all threads? No, it (PID) differs from thread on 1 and it is what actually shown in the process list.
'man gettid' says In a multithreaded process, all threads have the same PID, but each one has a unique TID. I've just tried: ==================================================== #define _GNU_SOURCE #include <pthread.h> #include <sys/types.h> #include <sys/syscall.h> #include <unistd.h> #include <stdio.h> void *print(void *a) { printf("%u %ld %lu\n", getpid(), syscall(__NR_gettid), pthread_self()); sleep(10); } main() { int i; pthread_t t; pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM); for (i=0; i < 20; i++) pthread_create(&t, &attr, print, 0); print(0); } ==================================================== for me all threads do have the same PID (I tried with and without attr).
My understanding is that each thread group has own PID, and now we have threads each in its own group, so they have both PID and thread ID different and unique.
That's not what I see.
Thread IDs are really unique ID for thread, but I was not able to make ps show it. It shows PID in TID column at least on my computer, so I decided to have them both is the best variant.
From 'man ps': ==================================================== THREAD DISPLAY H Show threads as if they were processes.
-L Show threads, possibly with LWP and NLWP columns. m Show threads after processes. -m Show threads after processes. -T Show threads, possibly with SPID column. ==================================================== all these switches worked for me, showing threads and either showing tid automatically (-L, -T) or when I requested it with -o tid. Regards, Sergei