首页 > 服务器 > Linux服务器 > 正文

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

2024-09-05 23:03:49
字体:
来源:转载
供稿:网友

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

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 pid/n");     exit(0);   }   else   {     printf("father pid/n");     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); } 

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表