本篇目录
代码中的多线程
1, 计算基础矩阵和单应矩阵,加快运算速度
目的:从两个矩阵中选取最佳来恢复最开始两帧之间的相对姿态,并进行三角化得到初始地图点
2. 整个系统运行比较随机,三大模块处理顺序不确定
原因:关键帧是贯穿整个系统的血脉,跟踪线程不产生关键帧,建图和回环线程基本处于空转状态,但是跟踪线程产生关键帧的频率和时机也不是确定的,需要三个线程同时运行,建图和回环线程不断循环check跟踪线程的关键帧,如果存在,则进行各自线程的处理。
多线程中的锁
1. 一个变量被多个线程同时操作,造成这个变量不知所措
方法:将成员函数本身设为私有变量,并在操作他们的公有函数内加锁;保证了某个时刻只有一个线程可以得到此成员变量,程序执行到此锁的位置,但是锁被别的线程拿着不放的话,当前线程就好停止下来,直到其他线程释放了这个锁,当前线程才能拿走锁并继续执行下去。
举例:关键帧一边被读,一边被写
2.加锁和释放锁的时机只在临时区域内
锁的有效区域只在大括号{}内,程序运行出大括号之后就释放锁了,这也是为什么有些程序莫名其妙加了括号的原因。
系统构建的概述
主要是三大步骤:
读取配置文件,初始化成员变量
创建三大线程
用关键帧的队列进行三大线程间的通信