The following program performs exactly the same calculation 5 times, once inside main(), and again in 4 thread functions. Though the calculations are identical, the results are not. When I compile and run the same program on my Mac, all the results are identical. By the way, this is using the latest gcc 3.4.4.
Richard Stanton ------------------ [c:\projects\threads]thread1 Main: t/1+t = 0.0005609048868329022342546 Thread 0: t/1+t = 0.0005609048868329021258344 Thread 1: t/1+t = 0.0005609048868329021258344 Thread 2: t/1+t = 0.0005609048868329021258344 Thread 3: t/1+t = 0.0005609048868329021258344 #include <stdio.h> #include <pthread.h> #define NUM_THREADS 4 double t = 0.0005612196776927068104374; void * thread_function (void *arg) { int i; int id = *((int *)arg); printf("Thread %d: t/1+t = %30.25lf\n", id, t/(1.0+t)); return NULL; } int main() { int i; int arg[NUM_THREADS] = {0,1,2,3}; pthread_t thread[NUM_THREADS]; pthread_attr_t attr; printf("Main: t/1+t = %30.25lf\n", t/(1.0+t)); /* initialize and set the thread attributes */ pthread_attr_init( &attr ); pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_JOINABLE ); /* creating threads */ for ( i=0; i<NUM_THREADS; i++ ) { if ( pthread_create( &thread[i], &attr, thread_function, (void *)&arg[i] )) { fprintf(stderr,"Creating thread %d failed!",i); return 1; } } /* joining threads (== waiting for them to exit) */ for ( i=0; i<NUM_THREADS; i++ ) { if ( pthread_join ( thread[i], NULL ) ) { fprintf(stderr,"Joing thread %d failed!",i); return 1; } } return 0; } -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/