This is the initial commit.
[keystone-rtos/netapi.git] / ti / runtime / netapi / OLD / synchtest2.c
1 #include <stdio.h>\r
2 #include <pthread.h>\r
3 #include <unistd.h>\r
4 #include <stdlib.h>\r
5 #include <sched.h>\r
6 #include <linux/unistd.h>\r
7 #include <sys/syscall.h>\r
8 #include <errno.h>\r
9 \r
10 #define INC_TO 1000000 // one million...\r
11 \r
12 int global_int = 0;\r
13 \r
14 pid_t gettid( void )\r
15 {\r
16         return syscall( __NR_gettid );\r
17 }\r
18 \r
19 void *thread_routine( void *arg )\r
20 {\r
21         int i;\r
22         int proc_num = (int)(long)arg;\r
23         cpu_set_t set;\r
24 \r
25         CPU_ZERO( &set );\r
26         CPU_SET( proc_num, &set );\r
27 \r
28         if (sched_setaffinity( gettid(), sizeof( cpu_set_t ), &set ))\r
29         {\r
30                 perror( "sched_setaffinity" );\r
31                 return NULL;\r
32         }\r
33 \r
34         for (i = 0; i < INC_TO; i++)\r
35         {\r
36 //              global_int++;\r
37                 __sync_fetch_and_add( &global_int, 1 );\r
38         }\r
39 \r
40         return NULL;\r
41 }\r
42 \r
43 int main()\r
44 {\r
45         int procs = 0;\r
46         int i;\r
47         pthread_t *thrs;\r
48 \r
49         // Getting number of CPUs\r
50         procs = (int)sysconf( _SC_NPROCESSORS_ONLN );\r
51         if (procs < 0)\r
52         {\r
53                 perror( "sysconf" );\r
54                 return -1;\r
55         }\r
56 \r
57         thrs = malloc( sizeof( pthread_t ) * procs );\r
58         if (thrs == NULL)\r
59         {\r
60                 perror( "malloc" );\r
61                 return -1;\r
62         }\r
63 \r
64         printf( "Starting %d threads...\n", procs );\r
65 \r
66         for (i = 0; i < procs; i++)\r
67         {\r
68                 if (pthread_create( &thrs[i], NULL, thread_routine,\r
69                         (void *)(long)i ))\r
70                 {\r
71                         perror( "pthread_create" );\r
72                         procs = i;\r
73                         break;\r
74                 }\r
75         }\r
76 \r
77         for (i = 0; i < procs; i++)\r
78                 pthread_join( thrs[i], NULL );\r
79 \r
80         free( thrs );\r
81 \r
82         printf( "After doing all the math, global_int value is: %d\n",\r
83                 global_int );\r
84         printf( "Expected value is: %d\n", INC_TO * procs );\r
85 \r
86         return 0;\r
87 }