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. }