/* 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;
        }
}
  
  
  
  
  
  
  
  
  
    Copyright © 1994 - 2014 Linux Journal.  All rights reserved.