优选主流主机商
任何主机均需规范使用

Linux环境下C/C++多进程与多线程编程实战详解及实例演示

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

1、多进程编程

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #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 pid\n" );      exit (0);    }    else    {      printf ( "father pid\n" );      sleep (60);    }        return 0; }

 2、多线程编程

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #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)、互斥

?

1 2 3 4 5 6 7 8 9 10 11 12 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)、条件变量

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 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); }

 

未经允许不得转载:搬瓦工中文网 » Linux环境下C/C++多进程与多线程编程实战详解及实例演示