#include<stdio.h>#include<stdlib.h>#include"common.h"intmain(intargc,char*argv[]){if(argc!=2){fprintf(stderr,"usage: cpu <string>\n");exit(1);}char*str=argv[1];while(1){printf("%s\n",str);Spin(1);}return0;}
程序会重复打印传入的字符串,Spin() 函数用于暂停 1 秒。
1
2
3
4
5
6
$ ./cpu "A"A
A
A
A
^C
如果后台运行多个实例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ ./cpu A & ./cpu B & ./cpu C & ./cpu D &[1]7353[2]7354[3]7355[4]7356A
B
D
C
A
B
D
C
A
...
#include<unistd.h>#include<stdio.h>#include<stdlib.h>#include"common.h"intmain(intargc,char*argv[]){int*p=malloc(sizeof(int));assert(p!=NULL);printf("(%d) address pointed to by p: %p\n",getpid(),p);*p=0;while(1){Spin(1);*p=*p+1;printf("(%d) p: %d\n",getpid(),*p);}return0;}
1
2
3
4
5
6
7
8
9
10
11
12
13
$ ./mem &; ./mem &[1]24113[2]24114(24113) address pointed to by p: 0x200000
(24114) address pointed to by p: 0x200000
(24113) p: 1(24114) p: 1(24114) p: 2(24113) p: 2(24113) p: 3(24114) p: 3(24113) p: 4(24114) p: 4
#include<stdio.h>#include<stdlib.h>#include"common.h"#include"common_threads.h"volatileintcounter=0;intloops;void*worker(void*arg){inti;for(i=0;i<loops;i++){counter++;}returnNULL;}intmain(intargc,char*argv[]){if(argc!=2){fprintf(stderr,"usage: threads <loops>\n");exit(1);}loops=atoi(argv[1]);pthread_tp1,p2;printf("Initial value : %d\n",counter);Pthread_create(&p1,NULL,worker,NULL);Pthread_create(&p2,NULL,worker,NULL);Pthread_join(p1,NULL);Pthread_join(p2,NULL);printf("Final value : %d\n",counter);return0;}
两个线程都更新共享计数器 counter 的值。
编译运行:
1
2
3
4
5
6
7
8
9
10
$ gcc -o thread thread.c -Wall -pthread
$ ./thread 1000Initial value : 0Final value : 2000$ ./thread 100000Initial value : 0Final value : 143012$ ./thread 100000Initial value : 0Final value : 137298