并发与并行

并发

并发(Concurrence):指两个或两个以上的事件或活动在同一时间间隔内发生。并发的实质是单个物理 CPU(也可以多个物理CPU) 在若干道程序之间多路复用,并发可以对有限物理资源强制行使多用户共享以提高效率。

逻辑上来说,执行实例是并发执行,但是物理上仍是串行执行

并行

并行(Parallelism)指两个或两个以上事件或活动在同一时刻发生。在多道程序环境下,并行性使多个程序同一时刻可在不同CPU上同时执行

C++ 并行

C++11 新标准中引入了五个头文件来支持多线程编程,它们分别是 <atomic>, <thread>, <mutex>, <condition_variable><future>

一个简单的例子:

#include <bits/stdc++.h> 
#include <thread>
using namespace std;

int e = 0;

void f() {
	e++;
	cout << "e is " << e << endl;
}

int main() {    

    for (int i = 0; i < 20; i++) {
    	std::thread t(f);
		t.join();
    }
	
	return 0;
}

一个新的线程通过构建 std::thread 对象而启动

新线程启动后,起始线程继续执行,如果起始线程不等待新线程结束,就会执行到main最后。可能新线程根本没机会启动,例子中用join让主线程等待新线程

join

加入一个新线程,主线程等待新线程结束

detach

不需要等待线程结束,将其分离,无法等待新线程完结