author:
- luixiao1223
title: chapter01
简介
-
Erlang
语言编程就是使用进程进行来实现并发。使用进程来实现并发的方式具有部署在不同物理机器上得优点,底层使用网络进行通信。 -
C++11允许可以不依赖于平台扩展来写多线程程序
-
分治法(两种)
- 一种是功能逻辑分开执行
- 一种是处理不同的数据区块
-
每个线程的栈开销大概是1MB
-
引入多线程设计的两种情况,
- 一个是执行效率
- 一个是逻辑清晰
-
C++标准库的效率很高,几乎和直接使用low level
api效率相同,所以使用标准库无需担心效率问题 -
如果开发者需要考虑极致的运行效率,可以使用atomic操作库中的方法,来直接控制同步线程
-
追求极致效率而采用low
level的功能,可能因为不好的结构,反而导致并发的效率低下。比如多个线程对同一个mutex访问发生冲突,会导致效率十分低下。 -
如果要使用标准库中没有的平台相关功能,可以在
native_handle()
函数中实现,这样就不再跨平台了.
Hello World
一般
#include <iostream>
int main()
{
std::cout<<"Hello World\n";
}
对于非多线程程序makefile如下
hello: main.o
gcc -o hello main.o -lstdc++
main.o: main.cpp
gcc -c main.cpp
clean:
rm main.o hello
多线程
#include <iostream>
#include <thread>
void hello()
{
std::cout<<"Hello Concurrent World\n";
}
int main()
{
std::thread t(hello);
t.join();// 等待线程结束
}
其中的makefile如下
hellothread: main.o
gcc -o hellothread main.o -std=c++11 -lstdc++ -pthread #需要加入pthread的原因是,pthread是linux下的线程库.所以它负责处理线程.
# C++标准只提供标准的接口.背后用什么线程库,不同的操作系统会不一样.现在用户不在需要和不同的操作系统线程库打交道了.只需要学习C++11的标准接口就好了.
main.o: main.cpp
gcc -c main.cpp
clean:
rm main.o hellothread
加粗样式