On 07.14, RVK wrote: > Ian Campbell wrote: > > >On Thu, 2005-07-14 at 16:32 +0530, RVK wrote: > > > > > >>Ian Campbell wrote: > >> > >> > >>>What Arjan is saying is that pthread_t is a cookie -- this means that > >>>you cannot interpret it in any way, it is just a "thing" which you can > >>>pass back to the API, that pthread_t happens to be typedef'd to unsigned > >>>long int is irrelevant. > >>> > >>> > >>Do you want to say for both 2.6.x and 2.4.x I should interpret that way ? > >> > >> > > > >As I understand it, yes, you should never try and assign any meaning to > >the values. The fact that you may have been able to find some apparent > >meaning under 2.4 is just a coincidence. > > > > > > > Iam sorry I don't agree on this. This confusion have created only becoz > of the different behavior of pthread_self() on 2.4.18 and 2.6.x kernels. > And Iam looking for clarifying my doubt. I can't digest this at all. >
It is simple: none ever never told you that a pthread_t has nothing to do with a pid. pthreads is a standard and portable implementation that guarantees you can port _pthread_ code between posix systems. It uses an internal opaque type to identify threads, but you should never relay on it have nothing to do with pids. The fact that somewhere-in-time-in-some-os the pthread_t equals the pid/tid/ etc is just pure chance. If you had code relaying on this, it is just broken. Where is stated if pthread_t is the tid, an index into a table internal to pthread library, a pointer to an struct (mmm, bloken on 64 bits?) or what ? Whatif: - you swith kernels and thread library implementation ? - you go solaris (it has user level threads ?) I think one of the sources of the confussion is that: - man pages about system calls talk about 'threads', but that should be read as 'sibling _processes_ created via clone(CLONE_THREAD) syscall'. - man pages about phthreads library also talk about 'threads', but that should be read as 'posix threads created via pthread_create'. And none guarantees that both 'threads' are the same. If you just want to use gettid(), don't go further that clone(). If you use pthread_create(), forget about gettid(). (AFAIK ;) ) -- J.A. Magallon <jamagallon()able!es> \ Software is like sex: werewolf!able!es \ It's better when it's free Mandriva Linux release 2006.0 (Cooker) for i586 Linux 2.6.12-jam9 (gcc 4.0.1 (4.0.1-0.2mdk for Mandriva Linux release 2006.0)) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/