C++ 并发指南-atomic 指针的使用(三)

单个的double,int,或者struct 无法满足线程间的通信

------ 需要使用 std::atomic<Mynt_d*> mynt_data;

1、先定义struct \ class

struct Mynt_frame_data{
    double img_time;
    cv::Mat imLeft,imRight;
    std::vector<ORB_SLAM3::IMU::Point > imu;
};

class Mynt_d{
public:
    Mynt_d() {
    };
    ~Mynt_d() = default;

public:
    std::vector<Mynt_frame_data > frame_data;
};

2、使用Mynt_d进行线程通信

  • 2.1 定义并初始化
class Slam_mynt{
public:
    Slam_mynt(){
        mynt_data=new Mynt_d();
    };

    bool init();
    bool mynt_init();
    bool Mynt_Slam3();

public:
    std::atomic<Mynt_d*>  mynt_data;
    std::thread mynt_init_thread,mynt_slam_thread;
};

bool Slam_mynt::init() {
    mynt_init_thread=std::thread(&Slam_mynt::mynt_init,this);
    sleep(10);
    mynt_slam_thread=std::thread(&Slam_mynt::Mynt_Slam3,this);
    return false;
}

  • 2.2 调用
bool Slam_mynt::mynt_init() {
	while(true){
		Mynt_d* my=mynt_data.load();
		/*储存操作 \ 读取操作*/
	}
}

bool Slam_mynt::Mynt_Slam3() {
	while(true){
		Mynt_d* my=mynt_data.load();
		/*储存操作 \ 读取操作*/
	}
}

这样即可在多个线程里面愉快的共享数据了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值