Date: Thu, 27 Nov 2003 01:10:08 -0500 (EST) From: Daniel Eischen <eischen@vigrid.com> To: "sapdb@komadev.de" <kai@freshx.de> Cc: freebsd-threads@freebsd.org Subject: Re: Continous thread ids Message-ID: <Pine.GSO.4.10.10311270055110.15725-100000@pcnet5.pcnet.com> In-Reply-To: <1069892789.3fc544b58a2d7@localhost>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 27 Nov 2003, sapdb@komadev.de wrote: > Hi, > > i wrote a little thread test programm. when i run it i get an output like > ... > 10 of 10 threads running, i am 0x8069000 > 10 of 10 threads running, i am 0x806c000 > 10 of 10 threads running, i am 0x806f000 > ... > > is there a generic way (not kse dependant), to get a still unique countinous > thread id starting with 1,2 .... n ? With linuxthreads, it was possible by a > dirty hack, masking out the upper 20 bit, but that seems not to be the way its > meant to work huh ? Yuk. If you want a portable method of getting continuous thread ids, you shouldn't use the thread id. This is what pthread_key_create() and pthread_[gs]et_specific() are for. -- Dan Eischen ------ #include <pthread.h> #include <stdio.h> #include <unistd.h> #define MAXTHREADS 10 pthread_key_t key; void * threadedCounter(void *x) { int i; pthread_setspecific(key, x); for (i = 0; i < 10; i++) { printf("%d of %d threads running, i am %p\n", (int)pthread_getspecific(key), MAXTHREADS, pthread_self()); sleep(2); } return (NULL); } int main(int argc, char *argv[]) { pthread_t t; int i; pthread_key_create(&key, NULL); for (i = 0; i < MAXTHREADS; i++) pthread_create(&t, NULL, threadedCounter, (void *)i); sleep(MAXTHREADS*3 + 2); return (0); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GSO.4.10.10311270055110.15725-100000>