C++并发编程(一):并发与并行,一个简单的多线程例子

并发与并行

并发:多个任务可以同时存在。程序在逻辑上可以实现多个任务同时存在,那么这个程序就是并发程序。并发程序在物理实现上既可以是并行,也可以是串行。

串行:单个处理器通过“任务切换”的方式,在一秒之内进行多次任务切换,给人一种任务并发的错觉。同一时间只有一个任务得到处理。

并行:多个任务在多个处理器中同时运行。多个任务在同一时间一起得到处理。

多进程并发与多线程并发

多进程并发:将应用程序分为多个进程。由于进程之间的资源并不能直接进行访问,进程之间的资源共享需要通过进行通信来完成,但是进程之间通信较为复杂。同时,操作系统为了对每个进程进行维护需要耗费更多资源,整体开销较大。但是,由于进程的资源保护,使用多进程并发更容易写出安全的并发程序。并且多进程并发可是实现远程连接,通过网络在不同的机器上运行进程。

多线程并发:单个进程运行多个线程。线程是轻量级的进程。多个线程之间共享内存地址。使用多线程并发开销更小,且更为灵活。但是为了保证数据一致性,将要做更多的额外工作。

一个简单的多线程例子

#include <thread>
#include <iostream>
using namespace std;

void hello(){
    for(int i = 0; i < 10; i++)
        cout << "hello concurrent \n";
}

int main(){
    thread t(hello);
    for(int i = 0; i < 10; i++)
        cout << "main concurrent \n";
    t.join();

}

1、c++提供了标准库thread来管理线程。thread库用于线程的管理,对于共享数据和通信的操作需要使用其他的库。

2、thread t(hello); 启动了一个新的线程,并以hello函数作为起始函数。

3、t.join();让main线程等待t线程结束。否则会报terminate called without an active exception。不加join的话,main线程可能提前结束后,回收资源。但是此时新线程还没有结束,还会对已经销毁的资源进行访问,引发错误。

main concurrent 
hello concurrent 
hello concurrent 
hello concurrent 
hello concurrent 
hello concurrent 
hello concurrent 
hello concurrent 
hello concurrent 
main concurrent 
main concurrent 
main concurrent 
main concurrent 
main concurrent 
main concurrent 
main concurrent 
main concurrent 
hello concurrent 
hello concurrent 
main concurrent 

从结果可以看出,main线程和t线程同时在进行各自的输出。

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Java并发编程实战 第二版》是一本非常优秀的Java并发编程经典著作,由Brian Goetz等多位作者共同编写而成。这本书的内容主要讲解了Java并发编程的基础知识,详细介绍了Java内存模型、线程安全性、锁、并发集合、并行计算等基础概念,并提供了大量的实际场景中的示例代码,非常适合Java开发工程师深入学习和实践。 本书分为四个部分,分别是基础知识部分、结构部分、行为部分和高级主题部分。其中基础知识部分主要讲解了Java并发编程的基本概念和原理;结构部分介绍了并发编程中的线程安全性、锁和同步机制;行为部分详细讲解了并发编程中的线程执行顺序、避免死锁和饥饿等问题;高级主题部分则探讨了Java并发编程中的高级技术,如并发集合、线程池、并行计算等。 总之,《Java并发编程实战 第二版》是一本非常值得推荐的Java并发编程经典著作,对于想要深入学习Java并发编程的开发工程师来说是一本不可或缺的参考资料。无论是从理论知识还是实践应用层面,都是非常有价值的。 ### 回答2: 《并发编程实战》第二版pdf文件是一本关于多线程编程的经典著作,书中详细介绍了多线程编程的基础知识、常见问题及解决方案,非常适合想要深入了解多线程编程的开发人员学习。 本书首先讲解了多线程的基础知识和概念,例如线程的创建、启动和停止等基本操作,以及多线程编程中遇到的常见问题,例如死锁、竞态条件等,给读者提供了全面的多线程编程基础。 随后,本书深入介绍了Java中的并发编程框架,如并发集合、锁、线程池等工具,同时也介绍了Java中的原子变量和锁优化等高级特性,让读者掌握和应用Java中的高效并发框架。 此外,本书还介绍了多线程编程相关的一些设计模式,例如线程封闭、不变模式等,为读者提供了一些实践经验和参考。 总之,《并发编程实战》第二版pdf文件是一本非常实用的多线程编程经典著作,通过深入浅出的方式,让读者全面掌握多线程编程的基础知识和高级特性,更好地应用多线程编程解决实际问题。 ### 回答3: 《并发编程实战第二版pdf》是一本非常实用的书籍,它讲述了Java并发编程的最佳实践及常用技术。书中详细介绍了Java并发程序设计中的竞态条件、死锁、线程安全性、锁的性能、并发集合、线程池等重要问题,并给出了相应的解决方案。 书中的示例代码生动具体,通过实例许多并发问题被生动地展现出来。在一个并发的系统里,很多人写的代码是为了完成短暂高并发,而不是持续高并发。但是这类代码在面临持续高并发的时候很容易崩溃。此时,中断与关闭线程、同步、线程安全性和锁的性能等都是需要考虑的问题。书中通过生动的案例详细阐述了这些问题,让读者更加深入地理解了如何编写高效的并发程序。 此外,书中还对线程池做了深入的讲解,介绍了如何使用线程池来提高并发性能,以及如何合理配置线程池参数。更为重要的是,书中的最后一章还讨论了大规模并发系统的设计和实现。这对目前越来越需要高并发处理的各类系统开发工程师来说,是一份非常有价值的参考资料。 总之,如果你是一名Java开发工程师,那么《并发编程实战第二版pdf》是一本必读的书籍。它能够帮助你理解Java并发编程的精髓,并提供有用的技术指导,以便你写出更高效、更安全、更稳定的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值