C++中的多线程std::thread 简单应用

在SLAM当中,会涉及到多线程的问题。

想来,大型的项目,也大都会用到多个线程进行管理。


C++中,想要创建多个线程,需要引入头文件。

#include<thread>

浅显的理解,创建多线程的过程:

①定义一个线程函数

void T1(){
//函数内容
}

②定义线程对象 std::thread 线程对象(线程函数);

std::thread t(T1);

③当线程创建成功并执行线程函数后,一定要保证线程函数运行结束才能退出,调用了join()函数阻塞线程,直到线程函数运行结束,回收对应创建线程的资源。当然还要另一种方式,叫做detach(),这种方式会使线程对象和线程函数分离,不易于观察线程什么时候结束。

t.join();

每个线程都有自己的线程标识,也就是线程ID,当线程创建成功后,可以通过get_id()来获取线程的ID。

为了进行线程资源之间的管理,常常会用到mutex进行约束。最常用的方式就是lock和unlock。在VINS当中就是采用的这种方式进行管理。可以举个例子:

std::mutex msg_buf;
void fuc(){
  msg_buf.lock;  //加锁
  //…执行
  msg_buf.unlock;  //解锁

}
int main(){
……

}

此外还可以利用chrono令线程睡眠等等。

最后附上自己写的一个小例子。

#include <iostream>
#include <thread>
#include <chrono>
#include <mutex>
#include "canshu.h"
using namespace std;
std::mutex msg_buf;
void Process(){
    msg_buf.lock();
    cout<< "线程开启\n";
    if(STEREO)
    {
        cout<<"这是双目模式\n";
    }
    else
    {
        cout<< "这是单目模式\n";
    }
    cout << "让我们等待2秒\n";
    std::this_thread::sleep_for(std::chrono::seconds(2));
    cout<<"等待结束\n";
    cout <<"来看看这个线程的id";
    cout <<"ID: " <<std::this_thread::get_id()<<" \n";
    cout <<"结束这个线程\n";
    msg_buf.unlock();
}

int main() {
    std::thread t1(Process);
    std::thread t2(Process);
    t1.join();
    t2.join();
    return 0;
}

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值