C++线程与原生线程

C++线程与原生线程

Intro:写本文时,笔者正被C++线程与Linux原生线程所困扰,本文通过简单比较其原理和基本概念,可以帮助读者梳理二者区别。

1. posix thread介绍


POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),POSIX标准意在期望获得源代码级别的软件可移植性。换句话说,为一个POSIX兼容的操作系统编写的程序,应该可以在任何其它的POSIX操作系统(即使是来自另一个厂商)上编译执行。


那么什么是posix thread呢?posix thread是 操作系统级(OS level)的API规范,主要用来定义线程及线程间同步的相关操作,采用C语言定义。posix规范主要在unix like类系统上实现;Windows类系统采用了自己的线程API。

Linux下的原生线程库pthread使用底层的C来编写,没有什么抽象封装,仅仅是一种简单、暴力美。

2. C++ 11线程库

目前很多语言都在其标准库中提供了 语言级的线程支持:如Java中的Thread,concurrenty包;python中的threading model;C++11标准中的thread库等。还有很多以第三方库方式提供的各种语言的线程实现,就不一一列举了。但是要注意:C++11从语言层面支持多线程操作,本质上是对系统调用的封装,极大的方便了开发人员。虽然大家说性能不咋样,但是十分方便:支持lambda、支持任意多个参数、设计良好…

3. linux下和C++的std::thread的区别:

  1. pthread是UNIX-Like下的线程库,是操作系统层面的调用;thread是C++11从语言层面开发的一套线程库,底层调用的还是系统API。
  2. pthread是系统原生线程库,效率功能上好像更好;
  3. std::thread使用更加方便。

4. Linux下,多线程编程是使用原生线程库还是std::thread?

总的来说,要考虑两个方面:

  1. 取决于现有项目采用的方案和GCC版本

    如果现有项目有了某个足够好的线程库,那就没必要使用C++11线程库,否则,优先考虑C++11线程库。

  2. 取决于有没有跨平台需求

    如果需要跨平台,那就选择平台抽象层次更高的方案来节省劳动。而各个操作系统都对C++11有着良好的实现,从代码的可维护性、开发简易度上来说,C++11是一个比较好的选择。

5. summary

Go and Learn C++!!!

你可能感兴趣的:(C,loves,CPP,c++,linux,多线程)