+++ /dev/null
-/********************************************************
- * An example source module to accompany...
- *
- * "Using POSIX Threads: Programming with Pthreads"
- * by Brad nichols, Dick Buttlar, Jackie Farrell
- * O'Reilly & Associates, Inc.
- *
- ********************************************************
- * specific.c
- *
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#include <sys/time.h>
-
-#include <pthread.h>
-
-#define NUM_THREADS 3
-pthread_key_t saved_time_key;
-
-
-void free_time(void *arg )
-{
- struct timeval *timev=(struct timeval *)arg;
- printf("free_time:\n");
- free(timev);
-}
-
-void save_the_time(void)
-{
- struct timeval *timev;
-
- timev = (struct timeval *)malloc(sizeof(struct timeval));
-
- gettimeofday(timev, NULL);
-
- printf("save_the_time: \t\t%ld %ld\n",timev->tv_sec, timev->tv_usec);
-
-
- pthread_setspecific(saved_time_key, (void *)timev);
-
-}
-
-void what_time_did_i_save(void)
-{
- struct timeval *timev;
-
- timev = pthread_getspecific(saved_time_key);
-
- printf("what_time_did_i_save: \t%ld %ld\n",timev->tv_sec, timev->tv_usec);
-
-}
-
-void *thread_routine(void *arg)
-{
- int *my_id=(int *)arg;
-
- printf("thread_routine %d\n", *my_id);
-
- save_the_time();
-
- what_time_did_i_save();
-
- return(NULL);
-}
-
-extern int
-main(void)
-{
- int i, *id_arg;
- pthread_t threads[NUM_THREADS];
-
- id_arg = (int *)malloc(NUM_THREADS*sizeof(int));
-
- printf("main : initializing the key\n");
- pthread_key_create(&saved_time_key, free_time);
-
- printf("main : spawing the threads\n");
- for (i = 0; i < NUM_THREADS; i++) {
-
- id_arg[i] = i;
-
- pthread_create(&(threads[i]),
- NULL,
- thread_routine,
- (void *) &(id_arg[i]));
- }
-
-
- for (i = 0; i < NUM_THREADS; i++) {
- pthread_join(threads[i], NULL);
- printf("main : thread %d has finished. \n", i);
- }
-
- printf("main : goodbye\n");
-
- return 0;
-}
-
-
-
-