C++多线程实现thread篇
为了优化提高代码效率,往往会用到多线程并行处理,据个人了解可以通过thread、openMP等方法实现,但目前也只是在探索测试阶段,用于记录,如有不当之处,还请高手指教。
下面是thread实现多线程的方法:
#include <iostream>
#include <vector>
#include <algorithm>
#include <thread>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
void GetImg1()
{
Mat test1 = imread("test1.jpg");
}
void GetImg2()
{
Mat test1 = imread("test2.jpg");
}
void GetImg3()
{
Mat test1 = imread("test3.jpg");
}
void GetImg4()
{
Mat test1 = imread("test4.jpg");
}
int main() //主线程
{
double start = static_cast<double>(getTickCount());
Mat test11 = imread("test1.jpg");
Mat test12 = imread("test2.jpg");
//Mat test13 = imread("test3.jpg");
//Mat test14 = imread("test4.jpg");
double time = ((double)getTickCount() - start) / getTickFrequency();
cout << "time1:" << time << endl;
start = static_cast<double>(getTickCount());
thread test1(GetImg1); //线程1
thread test2(GetImg2); //线程2
//thread test3(GetImg3); //线程3
//thread test4(GetImg4); //线程4
test1.join();
test2.join();
//test3.join();
//test4.join();
time = ((double)getTickCount() - start) / getTickFrequency();
cout << "time2:" << time << endl;
while (1);
return 0;
}
测试结果如下:
time1:0.371225
time2:0.17843
图片test1.jpg、test2.jpg、test3.jpg、test4.jpg是一模一样的四张图片,大小也相同,代码中单线程先后读取了test1.jpg、test2.jpg,耗时0.371225s,而加入多线程后,读取两张图片只需要0.17843s,效率确实提高了。