C++并发编程(CH01)


author:

  • luixiao1223
    title: chapter01

简介

  1. Erlang
    语言编程就是使用进程进行来实现并发。使用进程来实现并发的方式具有部署在不同物理机器上得优点,底层使用网络进行通信。

  2. C++11允许可以不依赖于平台扩展来写多线程程序

  3. 分治法(两种)

    • 一种是功能逻辑分开执行
    • 一种是处理不同的数据区块
  4. 每个线程的栈开销大概是1MB

  5. 引入多线程设计的两种情况,

    • 一个是执行效率
    • 一个是逻辑清晰
  6. C++标准库的效率很高,几乎和直接使用low level
    api效率相同,所以使用标准库无需担心效率问题

  7. 如果开发者需要考虑极致的运行效率,可以使用atomic操作库中的方法,来直接控制同步线程

  8. 追求极致效率而采用low
    level的功能,可能因为不好的结构,反而导致并发的效率低下。比如多个线程对同一个mutex访问发生冲突,会导致效率十分低下。

  9. 如果要使用标准库中没有的平台相关功能,可以在 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

加粗样式

发布了127 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/luixiao1220/article/details/104581056