1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* A simple example with 4 threads */ 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <pthread.h> 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <unistd.h> 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browndouble a[1000]; 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void init() 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i; 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for(i=0;i<1000;i++) a[i] = (double)i; 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void *th(void *v) 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double sum = 0.0; 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i,j; 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for(j=0;j<1000;j++) 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for(i=0;i<1000;i++) 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown sum += a[i]; 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *( (double*)v ) = sum; 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* make sure that no threads is so fast that it finishes 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * before last thread is created, thus reusing the TID */ 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown sleep(1); 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main() 33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_t t[4]; 35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double sum[4]; 36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i; 37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown init(); 39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for(i=0;i<4;i++) 41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_create(&t[i], NULL, th, &sum[i]); 42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for(i=0;i<4;i++) 44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_join(t[i], NULL); 45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 48