This is test2.c in view mode; [Download] [Up]
/* * FILE: A test of async context switching. */ #include <stdlib.h> #include <stdio.h> #include <pthread.h> #include <signal.h> #include <utils.h> #define ITERATIONS (1000000) #define THREADS (1) static void proc( struct timeval *tv ) { long i, sum = 0; for(i = 0; i < ITERATIONS; i++) sum += 1; i = 0; while( --sum >= 0 ) i += 1; pthread_exit( (void *) SUCCESS ); } static pthread_t *th; static pthread_attr_t attr; int main( int argc, char *argv[] ) { int thread_count = THREADS, i, exit_status; struct sched_param param = { SCHED_ROUND_ROBIN_C, PRI_RR_DEFAULT, 1 /* A single quantum */ }; if( argc == 2 ) thread_count = atoi( argv[1] ); (void) pthread_attr_init( &attr ); (void) pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_JOINABLE ); (void) pthread_attr_setschedparam( &attr, ¶m ); (void) pthread_setprio_np( pthread_self(), PRI_RR_MAX ); th = malloc( thread_count * sizeof( pthread_t * ) ); for(i = 0; i < thread_count; i++ ) (void) pthread_create( &th[i], &attr, (thread_proc_t) proc, NULL ); for(i = 0; i < thread_count; i++ ) { (void) pthread_join( th[i], (void **) &exit_status ); if( exit_status != SUCCESS ) fprintf(stderr, "Failed to join with th[%d]!\n", i); } free( th ); (void) pthread_attr_destroy( &attr ); print_system_counters(); return( EXIT_SUCCESS ); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.