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