树莓派中使用C++多线程执行程序
本文记录了自己使用C++在树莓派中编写多线程程序加快运行代码运行速度。
1. 多线程基础知识
参考了相关书籍与网站:http://wiki.jikexueyuan.com/project/cplusplus-concurrency-action/
经过几天的系统学习,最终放弃。
多线程基本代码:
#include <thread> // 多线程头文件
std::thread t(func, paras); // 启动线程,执行func,func的参数为paras
t.join(); // 等待线程执行结束
采用一种较为简单的方式进行线程返回数据。线程中修改全局变量,从而传递变量。
2. 开未知数量的多线程并行处理
由于项目需要识别多个二维码,所以可以将每个二维码区域并行识别,每个线程改变全局vector的每一位。
g_dmString.clear(); // 清空变量
for (int i = 0; i < d_MAX_THREAD_NUMBER; ++i){
g_dmString.push_back(""); // 开辟空间
}
// 使用vector开辟线程
vector<thread> v_thread(d_MAX_THREAD_NUMBER);
for (int i = 0; i < threadNumber; ++i) {
v_thread[i] = thread(func, paras, i);
}
// 等待线程返回
for (int i = 0; i < threadNumber; ++i){
v_thread[i].join();
}
// 接下来可以读取全局变量 g_dmString的值
3. 注意事项
在linux下需要包含 pthread 库,否则会在线程初始化 thread 时报错。