/* 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 - 2018 Linux Journal. All rights reserved.