多线程程序的奇怪问题记录

代码如下:

 1 #include <unistd.h>                                                                                                                                                                         
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <pthread.h>
 5 #include <stdio.h>
 6 char message[] = "Hello world!";
 7 int runNow = 1;
 8 static int printCount = 0;
 9 
10 void *threadFunction(void *arg){
11     //int printCount = 0;
12 
13     while(printCount-- > 0){
14         if(runNow == 2){
15             printf("2");
16             runNow = 1;
17         }else{
18             sleep(1);
19         }
20     }
21     sleep(3);
22 }
23 
24 int main(int argc, char **argv)
25 {
26     pthread_t threadA;
27     int printCount1 = 0;
28     void *threadResult;
29     int res = pthread_create(&threadA, NULL, threadFunction, (void *)message);
30 
31     if(res != 0){
32         perror("Thread creation failed!");
33         exit(EXIT_FAILURE);
34     }
35 
36     while(printCount++ < 20){
37         if(runNow == 1){
38             printf("1");
39             runNow = 2;
40         }else{
41             sleep(1);
42         }
43     }
44 
45     printf("Waiting for thread to finish...\n");
46     res = pthread_join(threadA, &threadResult);
47     if(res != 0){
48         perror("Thread join failed");
49         exit(EXIT_FAILURE);
50     }
51     printf("Thread joined\n");
52 
53     exit(EXIT_SUCCESS);
54 }

编译:gcc -g thread2.c -o thread2 -lpthread

运行结果可以是以下几种:

1  thread2
12121212121212121212121Waiting for thread to finish...
Thread joined

 2 thread2
121Waiting for thread to finish...
Thread joined

 3 thread2
121Waiting for thread to finish...
Thread joined

 4 thread2
12121Waiting for thread to finish...
Thread joined

 5 thread2
121212121Waiting for thread to finish...
Thread joined

还在思索中

#include <pthread.h>
posted @ 2021-01-09 09:39  叕叒双又  阅读(89)  评论(0编辑  收藏  举报