受欢迎的博客标签

C++ 并发编程(从C++11到C++20)改造for循环

Published

 

并非所有的语言都提供了多线程的环境。

C++语言,直到C++11标准之前,也是没有多线程支持的。在这种情况下,Linux/Unix平台下的开发者通常会使用POSIX Threads,Windows上的开发者也会有相应的接口。但很明显,这些API都只针对特定的操作系统平台,可移植性较差。如果要同时支持Linux和Windows系统,你可能要写两套代码。

C++ 11标准发布之后,提供了名为thread的跨平台线程库。然后,在C++ 14和C++ 17和C++20标准中又对并发编程机制进行了增强。

 

C++ 11创建线程
创建线程非常的简单的,下面就是一个使用了多线程的Hello World示例:

 

 

https://www.modernescpp.com/index.php/multithreading-in-c-17-and-c-20

 

for (int i=0;i<1000;i++)
{
    //do something
}

 

要注意的是,参数是以拷贝的形式进行传递的。因此对于拷贝耗时的对象你可能需要传递指针或者引用类型作为参数。但是,如果是传递指针或者引用,你还需要考虑参数对象的生命周期。因为线程的运行长度很可能会超过参数的生命周期(见下文detach),这个时候如果线程还在访问一个已经被销毁的对象就会出现问题。

详见

https://blog.csdn.net/DumpDoctorWang/article/details/79729281

 

C++ 并发编程(从C++11到C++17)

https://paul.pub/cpp-concurrency/