> Mead, Jennifer L wrote: > > Hi C folks, > > [ snip ] > MAIN > -------- You should always try to post a complete example that someone can cut, paste and compile. > pthread_t main_thr; > pthread_t thr; > pthread_attr_t attr; > > main_thr = pthread_self(); > p=malloc(2); Okay, here you have p pointing to two bytes. Or NULL, if that failed. :) > p = buffer;void *watch_dir(void *arg) And here you have leaked that two-byte allocation by assigning to p. What is this extra syntax? It looks like the declaration of an external function. But there is no semicolon. > pthread_key_t key; > > pthread_key_create(&key, NULL); Creating a key as a local variable seen only by one thread is almost certainly pointless. The idea is that the key is shared among all the threads. Each thread looking at that same key will see its own specific data which it stored under that key. This is essentially a mechanism for extending threads with user-defined attributes. The key serves as the attribute name, and the value (getspecific/setspecific) is that attribute's value in the calling thread. In each calling thread, the attribute can have a different value, which is what "thread specific" means. So the key is usually stored in some static data structure, or perhaps a dynamically allocated data structure that all the threads know about. This isn't really a GCC question; there is a comp.programming.threads Usenet newsgroup for discussing POSIX (and other) threads.