您的位置:首页 > 编程语言 > C语言/C++

C++并发编程:一、基本概念

2017-01-25 14:26 295 查看
并发编程基本概念
我们先使用多线程实现并发的方式写一个例子:
#include <iostream>
#include <thread>

void hello()
{
std::cout << "Hello, World!" << std::endl;
}

int main()
{
std::thread t(hello);
t.join();
return 0;
}
在以上代码中,使用了C++11提供的<thread>头文件,该头文件提供了线程类thread。在主线程(main函数)中,创建了一个thread对象t,该对象需要一个函数地址作为新线程的起始函数,接下来调用join()方法,在主线程中对新线程进行等待,避免主线程结束了而新线程还没有执行完的情况出现。以上是一个十分简单的用C++11标准库提供的支持所写的一个多线程的小例子,接下来,介绍一些关于并发的概念,以及实现并发的两种方式。

什么叫做并发?
其实,从计算机映射到现实生活中,我们经常会遇到一些并发的情况。比如说,我们可以边思考,边走路,比如说左手画方右手同时画圆,这都可以说是生活中人的并发能力。在计算机的范畴内,并发是指在同一时间执行多个任务,但这又不真正的是在同一时刻执行,因为现在的桌面或者笔记本类型的计算机,所支持的硬件级并发能力是有限的,就算是4核处理器,或者是多个处理器,每个处理器又有多核,也不能保证实现真正的硬件级并发,因为如果你同一时间打开的任务有可能会有很多,总有可能会超出硬件级并发的能力,当这种情况出现时,计算机还有一种能力能够实现并发,这就涉及到了任务切换,但这就不属于真正的硬件级的并发了。

如何实现并发?
两种方式:一,使用多个进程;二,在一个进程中使用多个线程;在我们上面的代码例子中使用的就是多线程的方式。
多进程实现并发:
我们可以把一个应用分为多个进程,每个进程有一个线程,各进程之间使用常见的进程间通讯方式(如:信号、socket,文件,管道)进行通信。如下图:



使用这种方式实现并发占用系统资源过多,因此并不推荐。
多线程实现并发:
一个线程很像一个轻量级的进程:每个线程独立于其他线程,每个线程有自己的指令序列。但是不同于多进程,一个进程中的各线程共享同一个地址空间,各个线程之间可以共享数据(如全局变量,也可以通过指针或引用在各线程之间传递数据)。使用多线程实现并发的方式的系统开销要远小于多进程的方式,因此一般推荐使用多线程实现并发。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息