linux下的CC++多进程多线程编程实例详解

linux下的CC++多进程多线程编程实例详解

1、多进程编程

  #include <stdlib.h>   #include <sys/types.h>   #include <unistd.h>      int main()   {     pid_t child_pid;        /* 创建一个子进程 */     child_pid = fork();     if(child_pid == 0)     {       printf("child pidn");       exit(0);     }     else     {       printf("father pidn");       sleep(60);     }          return 0;   }   

 2、多线程编程

  #include <stdio.h>   #include <pthread.h>      struct char_print_params   {     char character;     int count;   };      void *char_print(void *parameters)   {     struct char_print_params *p = (struct char_print_params *)parameters;     int i;        for(i = 0; i < p->count; i++)     {       fputc(p->character,stderr);     }        return NULL;   }      int main()   {     pthread_t thread1_id;     pthread_t thread2_id;     struct char_print_params thread1_args;     struct char_print_params thread2_args;        thread1_args.character = 'x';     thread1_args.count = 3000;     pthread_create(&thread1_id, NULL, &char_print, &thread1_args);        thread2_args.character = 'o';     thread2_args.count = 2000;     pthread_create(&thread2_id, NULL, &char_print, &thread2_args);        pthread_join(thread1_id, NULL);     pthread_join(thread2_id, NULL);        return 0;   }   

 3、线程同步与互斥

1)、互斥

  pthread_mutex_t mutex;   pthread_mutex_init(&mutex, NULL);      /*也可以用下面的方式初始化*/   pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;      pthread_mutex_lock(&mutex);   /* 互斥  */      thread_flag = value;      pthread_mutex_unlock(&mutex);   

2)、条件变量

  int thread_flag = 0;   pthread_mutex_t mutex;   pthread_cond_t thread_flag_cv;      void init_flag()   {     pthread_mutex_init(&mutex, NULL);     pthread_cond_init(&thread_flag_cv, NULL);     thread_flag = 0;   }      void *thread_function(void *thread_flag)   {     while(1)     {       pthread_mutex_lock(&mutex);       while(thread_flag != 0 )       {         pthread_cond_wait(&thread_flag_cv, &mutex);       }       pthread_mutex_unlock(&mutex);          do_work();     }        return NULL;   }      void set_thread_flag(int flag_value)   {     pthread_mutex_lock(&mutex);     thread_flag = flag_value;        pthread_cond_signal(&thread_flag_cv);     pthread_mutex_unlock(&mutex);   }   

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

参与评论