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

发布时间 - 2026-01-11 00:48:53    点击率:

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); 
} 

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


# Linux  # 多线程详解  # 浅谈linux模拟多线程崩溃和多进程崩溃  # Linux中进程和线程的对比与区别  # Linux多线程环境下 关于进程线程终止函数总结  # linux线程切换和进程切换的方法  # linux下如何把进程/线程绑定到特定cpu核上运行  # 互斥  # 多线程  # 可以用  # 希望能  # 谢谢大家  # 创建一个  # char  # pid  # child  # printf  # sleep  # child_pid  # fork  # exit  # stdio  # nbsp  # struct  # pthread  # char_print_params  # father 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  JavaScript如何实现继承_有哪些常用方法  高端智能建站公司优选:品牌定制与SEO优化一站式服务  Laravel如何实现API资源集合?(Resource Collection教程)  bing浏览器学术搜索入口_bing学术文献检索地址  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  Laravel如何自定义分页视图?(Pagination示例)  如何有效防御Web建站篡改攻击?  如何在IIS中新建站点并配置端口与物理路径?  Laravel如何发送系统通知?(Notification渠道示例)  jQuery中的100个技巧汇总  Laravel如何处理异常和错误?(Handler示例)  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  微信小程序 HTTPS报错整理常见问题及解决方案  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  高性能网站服务器配置指南:安全稳定与高效建站核心方案  html5的keygen标签为什么废弃_替代方案说明【解答】  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  如何在景安云服务器上绑定域名并配置虚拟主机?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  HTML 中动态设置元素 name 属性的正确语法详解  网易LOFTER官网链接 老福特网页版登录地址  如何在云指建站中生成FTP站点?  如何用AWS免费套餐快速搭建高效网站?  如何挑选优质建站一级代理提升网站排名?  Internet Explorer官网直接进入 IE浏览器在线体验版网址  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  Python数据仓库与ETL构建实战_Airflow调度流程详解  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  北京企业网站设计制作公司,北京铁路集团官方网站?  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  中国移动官方网站首页入口 中国移动官网网页登录  如何在Windows虚拟主机上快速搭建网站?  *服务器网站为何频现安全漏洞?  ,交易猫的商品怎么发布到网站上去?  如何在阿里云完成域名注册与建站?  Laravel如何处理表单验证?(Requests代码示例)  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  Laravel怎么为数据库表字段添加索引以优化查询  如何在 Pandas 中基于一列条件计算另一列的分组均值  实例解析Array和String方法