C++11多线程学习-1

来源:互联网 发布:linux rm 删除文件 编辑:程序博客网 时间:2024/05/29 02:32

说明

最近打算好好学习多线程编程,特从网上和书籍中翻阅相关资料进行学习。据说C++11多线程主要以《C++ Concurrency In Action》这本书作为学习素材,打算先通过网上学习,如果需要在进行购买此书籍。

并发概述

谈及到多线程编程,那么首先需要了解并发的概念。何谓并发,我们可以这样形象的理解,比如说人在行走过程中可以唱歌,行走和唱歌是两件事情,但是他们是并发执行的。将这种行为映射到计算机领域进行理解为一个处理器同时运行多个应用程序,或者多个处理器,但是每个处理器处理不一样的事情。

通过图形化方式进行说明可能更加形象,图例为盗用别人绘制的结果,只为说明:


在上图中,双核甚至多核才是我们真正心中所想的多线程并行技术,单核情况实际处理是通过程序进行多任务切换方式实现的并发效果。但是,在实际的使用过程中,双核甚至多核的实际使用情况可能是下面这种情况:

这种情况主要是考虑到充分利用计算机性能。

并发的实现

并发的实现可以使用多进程(Multi-Process)或者多线程(MultiThread)的方式,多进程的优势在于各个进程之间互不干扰,但是可能需要进程间的相互通信处理。多线程的处理方式是一种轻量级的进程方式,多个线程可以共享资源,但是它们之间可能会出现竞争的问题。多进程和多线程的处理方式可以用下面示例说明:


为了完成一个任务需要多个人合作完成,多进程的方式好比把这些人分配到不同的办公室,他们之间相互独立,可以做自己该做的事情,也不用担心自己需要某件办公设备时被其他人占用,但是带来的问题是它们经常需要走出自己的办公室与其他同事交流关于任务的完成情况(也就是进程间的通信IPC)。 
多线程的方式好比把所有人集中在一个办公室工作,他们之间的交流十分方便,但是带来的问题是需要共享办公设备时常常需要等待

C++11中提供适用于跨平台的多线程方式,下面对C++11下的HelloWorld做一个简单的说明
#include <iostream>#include <thread>using namespace std;void hello() {    cout << "Hello World!" << endl}int main(){    thread t(hello);    t.join();        return 0;}
C++11中的多线程通过std::thread创建,通过一个可调用对象来初始化它。主线程等待线程t执行结束。

Thread类中的join()方法能够将两个交替执行的线程合并为顺序执行的线程,比如说在线程B中调用线程A的jion()方法,线程A将插入线程B之前,直到线程A执行完毕后才会继续执行线程B。



0 0
原创粉丝点击