为什么 这段代码的 “Hello World” 不能输出.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <string.h>
#define MAX_THREADS 4 #define ATOMIC_ADD_FETCH(a) __sync_add_and_fetch(a, 1) //原子 变量自增 #define ATOMIC_SUB_FETCH(a) __sync_sub_and_fetch(a, 1) //原子 变量自减
static int thread_count = 0;
void* run_start(void* arg) { ATOMIC_ADD_FETCH(&thread_count); pthread_exit(NULL); return NULL; }
int main(int argc, char* argv[]) { int i = 0; pthread_t thread_list[MAX_THREADS];
for(i = 0; i < MAX_THREADS; i++) { pthread_create(thread_list + i, NULL, run_start, (void*)(size_t)i); }
while(MAX_THREADS != thread_count);
printf("Hello World\n");
return 0; }
|
编译运行
1 2 3 4 5 6 7 8 9 10 11 12
| chunli@blog:/tmp$ gcc -O3 main.c -lpthread && ./a.out
^C chunli@blog:/tmp$ gcc -O2 main.c -lpthread && ./a.out
^C chunli@blog:/tmp$ gcc -O1 main.c -lpthread && ./a.out
^C chunli@blog:/tmp$ gcc -O0 main.c -lpthread && ./a.out Hello World chunli@blog:/tmp$
|
结论
没有优化的代码. 是可以的运行的.