/* Code Example 2 */ #include <pthread.h> /* most threads that this program will create */ #define MAX_NUMBER_OF_THREADS ... /* function prototypes */ void* client_thread( void* ); void prepare_data( void ); void lump_send( data_t ); /* global key to the thread specific data */ pthread_key_t priority_key; int main( void ) { int n; pthread_t thread_id[MAX_NUMBER_OF_THREADS]; ... /* create the thread specific data key * before creating the threads */ pthread_key_create( &priority_key, NULL ); ... /* create thread that will use the key */ pthread_create( &thread_id[n], NULL, client_thread, NULL ); ... } void* client_thread( void* arg ) { ... prepare_data(); ... } void prepare_data( void ) { data_t some_data; ... /* store the value 1. This value is * globally available, but only to this * thread */ pthread_setspecific( priority_key, (void*)1 ); ... lump_send( some_data ); ... } void lump_send( data_t some_data ) { /* get this thread's global data from * priority_key */ switch( (int)pthread_getspecific( priority_key )) { case 1: /* do one thing */ break; case 2: /* do something else */ break; } }