C++知识点(1)_thread库

C++11之后有了标准的线程库,std::thread,通过创建一个thread对象来管理c++程序中的多线程。
通常会看到pthread,这是linux下c++线程库,提供一些线程的操作,偏向底层。对于多线程必须明白线程安全、线程同步和互斥关系、线程如何通信、与进程间的关系等,否则会陷入以下迷茫:
(1)程序死锁,不响应
(2)执行结果达不到预期
(3)多线程性能并无提升执行效率
(4)理不清程序执行流程
(5)不知道如何调试,同上
今天的案例是在进行LeGo-LOAM中地图优化代码阅读时,对于多线程的程序执行问题的疑问,通过模仿地图优化执行写了以下demo,希望能够帮助自己理解多线程的程序执行问题。

#include<iostream>
#include<thread>
#include<string>
using namespace std;
class CTest
{
public:
    CTest(){cout<<"000"<<endl;}
    int tstart(const string& tname)
    {
        cout<<"thread t1!"<<tname<<endl;
        return 0;
    }
    int tend(const string& tname)
    {
        cout<<"thread t2!"<<tname<<endl;
        return 0;
    }
    int run (int j)
    {
        cout<<"run"<<j<<endl;
        return 0;
    }
    };

int main()
{ 
    CTest obj;
    /*关于参数的说明:
    参数1类型为成员函数的函数指针
    参数2类型为指向该类型的实例的指针
    参数3为传入的函数参数
    */
    thread t1(&CTest::tstart,&obj,"111");//参数1:线程函数,
    thread t2(&CTest::tend,&obj,"222");

    for(int i=0;i<5;i++)
    {
        obj.run(i);
    }
    //join线程,调用该函数会阻塞当前线程,知道*this所标识的线程执行完毕,join才返回
    t1.join();
    t2.join();
    cout<<"Main function!"<<endl;
    return 0;
}

程序执行结果:

000
run0
run1
run2
run3
run4
thread t1!111
thread t2!222
Main function!

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(test1)
set(CMAKE_BUILD_TYPE "-Release")
add_compile_options(-std=c++11 -g -Wall)
add_executable(test1 test1.cpp)
target_link_libraries(test1 pthread)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章