linux下的C\C++多进程多线程编程

来源:互联网 发布:etcd c语言接口 watch 编辑:程序博客网 时间:2024/04/30 08:36

1、多进程编程

[cpp] view plaincopy
  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.         printf("child pid\n");  
  14.         exit(0);  
  15.     }  
  16.     else  
  17.     {  
  18.         printf("father pid\n");  
  19.         sleep(60);  
  20.     }  
  21.       
  22.     return 0;  
  23. }  


 

2、多线程编程

[cpp] view plaincopy
  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.     thread1_args.character = 'x';  
  31.     thread1_args.count = 3000;  
  32.     pthread_create(&thread1_id, NULL, &char_print, &thread1_args);  
  33.   
  34.     thread2_args.character = '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)、互斥

[cpp] view plaincopy
  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)、条件变量

[cpp] view plaincopy
  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. }  
0 0
原创粉丝点击