1、多进程编程



1. #include <stdlib.h>  
2. #include <sys/types.h>  
3. #include <unistd.h>  
4.   
5. int main()  
6. {  
7.     pid_t child_pid;  
8.   
9. /* 创建一个子进程 */  
10.     child_pid = fork();  
11. if(child_pid == 0)  
12.     {  
13. "child pid\n");  
14.         exit(0);  
15.     }  
16. else  
17.     {  
18. "father pid\n");  
19.         sleep(60);  
20.     }  
21.       
22. return 0;  
23. }


 

2、多线程编程



1. #include <stdio.h>  
2. #include <pthread.h>  
3.   
4. struct char_print_params  
5. {  
6. char character;  
7. int count;  
8. };  
9.   
10. void *char_print(void *parameters)  
11. {  
12. struct char_print_params *p = (struct char_print_params *)parameters;  
13. int i;  
14.   
15. for(i = 0; i < p->count; i++)  
16.     {  
17.         fputc(p->character,stderr);  
18.     }  
19.   
20. return NULL;  
21. }  
22.   
23. int main()  
24. {  
25.     pthread_t thread1_id;  
26.     pthread_t thread2_id;  
27. struct char_print_params thread1_args;  
28. struct char_print_params thread2_args;  
29.   
30. 'x';  
31.     thread1_args.count = 3000;  
32.     pthread_create(&thread1_id, NULL, &char_print, &thread1_args);  
33.   
34. 'o';  
35.     thread2_args.count = 2000;  
36.     pthread_create(&thread2_id, NULL, &char_print, &thread2_args);  
37.   
38.     pthread_join(thread1_id, NULL);  
39.     pthread_join(thread2_id, NULL);  
40.   
41. return 0;  
42. }



 3、线程同步与互斥

1)、互斥


1. pthread_mutex_t mutex;  
2. pthread_mutex_init(&mutex, NULL);  
3.   
4. /*也可以用下面的方式初始化*/  
5. pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;  
6.   
7. pthread_mutex_lock(&mutex);  
8. /*  互斥   */  
9.   
10. thread_flag = value;  
11.   
12. pthread_mutex_unlock(&mutex);


 

2)、条件变量



1. int thread_flag = 0;  
2. pthread_mutex_t mutex;  
3. pthread_cond_t thread_flag_cv;\  
4.   
5. void init_flag()  
6. {  
7.     pthread_mutex_init(&mutex, NULL);  
8.     pthread_cond_init(&thread_flag_cv, NULL);  
9.     thread_flag = 0;  
10. }  
11.   
12. void *thread_function(void *thread_flag)  
13. {  
14. while(1)  
15.     {  
16.         pthread_mutex_lock(&mutex);  
17. while(thread_flag != 0 )  
18.         {  
19.             pthread_cond_wait(&thread_flag_cv, &mutex);  
20.         }  
21.         pthread_mutex_unlock(&mutex);  
22.   
23.         do_work();  
24.     }  
25.   
26. return NULL;  
27. }  
28.   
29. void set_thread_flag(int flag_value)  
30. {  
31.     pthread_mutex_lock(&mutex);  
32.     thread_flag = flag_value;  
33.   
34.     pthread_cond_signal(&thread_flag_cv);  
35.     pthread_mutex_unlock(&mutex);  
36. }