Mail Archives: cygwin/2008/08/04/01:04:20
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/
- Raw text -