Commit ec89e787 ec89e787174ad0acb3a8b59f92613fd4738c1860 by

Initial commit

0 parents
No preview for this file type
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <pthread.h>
4 #include <unistd.h>
5 #include <errno.h>
6
7 int calcpi() {
8 int r[2800 + 1];
9 int i, k;
10 int b, d;
11 int c = 0;
12
13 for (i = 0; i < 2800; i++) {
14 r[i] = 2000;
15 }
16
17 for (k = 2800; k > 0; k -= 14) {
18 d = 0;
19
20 i = k;
21 for (;;) {
22 d += r[i] * 10000;
23 b = 2 * i - 1;
24
25 r[i] = d % b;
26 d /= b;
27 i--;
28 if (i == 0) break;
29 d *= i;
30 }
31 c = d % 10000;
32 }
33
34 return 0;
35 }
36
37 void * thread_main(void * ptr) {
38 while (1 == 1) calcpi();
39 }
40
41 int main(int argc, char * * argv) {
42 if(argc < 2) {
43 printf("\nUsage: %s <n> <p>\n\nWhere\n<n> is the number of threads to run in parallell\n<p> is the priority (optional)\n\n", argv[0]);
44 return 0;
45 }
46 int numT = atoi(argv[1]);
47 printf("\nStarting %d threads calculating PI. Hit Cntrl-C to stop or send a kill signal\n",numT);
48 pthread_t lastT;
49 int prio = 0;
50 if(argc == 3) {
51 prio = atoi(argv[2]);
52 errno = 0;
53 int res = nice(prio);
54 if(errno != 0) {
55 printf("Setting nice %d failed (code %d), are you root?\n", prio, errno);
56 } else {
57 printf("Process nice value set to %d\n", res);
58 }
59 }
60 for(int x=0; x < numT; x++) {
61 pthread_create(&lastT, NULL, thread_main, NULL);
62 }
63 pthread_join(lastT, NULL);
64 exit(0);
65 }