当前位置: 首页 > news >正文

C++并发编程实战学习笔记

一、C++的并发:

        多进程并发:

        将应用程序分为多个独立的进程,它们在同一时刻运行,就像同 时进行网页浏览和文字处理一样。独立的进程可以通过进程间常规的通信渠道传递讯息(信号、套接字、文件、管道等等)。不过,这种进程之间的通信通常不是设置复杂, 就是速度慢,这是因为操作系统会在进程间提供了一定的保护措施,以避免一个进程去修改 另一个进程的数据。还一个缺点是,运行多个进程所需的固定开销:需要时间启动进程,操 作系统需要内部资源来管理进程,等等。

        当然,以上的机制也不是一无是处:操作系统在进程间提供的附加保护操作和更高级别的通 信机制,意味着可以更容易编写安全(safe)的并发代码。实际上,在类似于Erlang编程环境 中,将进程作为并发的基本构造块。

       使用独立的进程,实现并发还有一个额外的优势———可以使用远程连接(可能需要联网)的方 式,在不同的机器上运行独立的进程。虽然,这增加了通信成本,但在设计精良的系统上, 这可能是一个提高并行可用行和性能的低成本方式。

        多线程并发:

       并发的另一个途径,在单个进程中运行多个线程。线程很像轻量级的进程:每个线程相互独 立运行,且线程可以在不同的指令序列中运行。但是,进程中的所有线程都共享地址空间, 并且所有线程访问到大部分数据———全局变量仍然是全局的,指针、对象的引用或数据可 以在线程之间传递。虽然,进程之间通常共享内存,但这种共享通常也是难以建立,且难以 管理。因为,同一数据的内存地址在不同的进程中是不相同。

        地址空间共享,以及缺少线程间数据的保护,使得操作系统的记录工作量减小,所以使用多 线程相关的开销远远小于使用多个进程。不过,共享内存的灵活性是有代价的:如果数据要 被多个线程访问,那么程序员必须确保每个线程所访问到的数据是一致的。

二、线程管理:

        线程管理的基础:

        每个程序至少有一个线程:执行main()函数的线程,其余线程有其各自的入口函数。线程与原 始线程(main()为入口函数的线程)同时运行。如同main()函数执行完会退出一样,当线程执行完入口函数后,线程也会退出。在为一个线程创建了一个 std::thread 对象后,需要等待这个线程结束;不过,线程需要先进行启动。

  •  线程启动:线程在 std::thread 对象创建(为线程指定任务)时启动,这种函数在其所属线程上运行,直到函数执行完毕,线程也就结束了。在一些极端情况下,线程运行时,任务中的函数对象需要通过某种通讯机制进行参数的传递,或者执行一系列独立操作;可以通过通讯机制传递信号,让线程停止。线程要做什么,以及什么时候启动,其实都无关紧要。

三、线程间共享数据:

四、同步并发操作:

五、C++内模型和原子类型操作:

六、基于锁的并发数据结构设计:

七、无锁并发数据结构设计:

八、并发代码设计:

九、高级线程管理:

十、多线程程序测试和调试:

http://www.lryc.cn/news/402743.html

相关文章:

  • 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【25】【分布式事务】
  • HC05主从一体蓝牙模块的裸机使用——单片机<-->蓝牙模块
  • “点点通“餐饮点餐小程序-计算机毕业设计源码11264
  • C#知识|账号管理系统-账号信息管理界面[1]:账号分类选择框、Panel面板设置
  • Meta即将推出4000亿的Llama 3 超级AI模型,或将改写大语言模型竞争格局!|TodayAI
  • 数据挖掘新技能:Python爬虫编程指南
  • object-C 解答算法:移动零(leetCode-283)
  • 靖江美食元宇宙
  • 模板方法设计模式
  • 对象存储解决方案:高性能分布式对象存储系统MinIO
  • 2024 年需要考虑的 16 个知识库趋势和统计数据
  • 微信小程序-实现跳转链接并拼接参数(URL拼接路径参数)
  • 【代码随想录|第十一章 图论part01 | 797.所有可能的路径 】
  • 尚硅谷大数据技术-数据湖Hudi视频教程-笔记03【Hudi集成Spark】
  • 【python】Pandas中IndexError: single positional indexer is out of bounds的报错分析
  • ubuntu上通过修改grub启动参数,将串口重定向到sol
  • 【Git】(基础篇四)—— GitHub使用
  • 【Qt+opencv】基础的图像绘制
  • 使用Nginx OpenResty与Redis实现高效IP黑白名单管理
  • EasyExcel导入导出数据类型转换
  • stm32入门-----EXTI外部中断(下——实践篇)
  • 深度学习落地实战:基于UNet实现血管瘤超声图像分割
  • Python进阶(4)--正则表达式
  • RCA连接器是什么?一文读懂
  • 【linux】服务器安装NVIDIA驱动
  • 【达梦数据库】关于用户、模式、表空间等如何理解?
  • 一篇就够mysql高阶知识总结
  • CTF-Web习题:[BJDCTF2020]ZJCTF,不过如此
  • 【IEEE出版】第四届能源工程与电力系统国际学术会议(EEPS 2024)
  • 浅谈Vue:text-align: center、align-items: center、justify-content: center三种居中的区别和用法