#include <iostream>
#include <thread>
#include <vector>
#include<stdio.h>
const int ARRAY_SIZE = 20;
const int NUM_THREADS = 10;
void incrementElements(std::vector<int>& arr, int start, int end) {
for (int i = start; i < end; ++i) {
arr[i] += 1;
// 做耗时的操作,还是多线程时间更短一点
std::this_thread::sleep_for(std::chrono::seconds(1));
/*std::cout << "Function has resumed execution after 2 seconds" << std::endl;*/
}
}
int main() {
std::vector<int> arr(ARRAY_SIZE, 0);
std::vector<std::thread> threads;
int chunkSize = ARRAY_SIZE / NUM_THREADS;
clock_t st = clock();
for (int i = 0; i < NUM_THREADS; ++i) {
int start = i * chunkSize;
int end = (i == NUM_THREADS - 1) ? ARRAY_SIZE : (i + 1) * chunkSize;
threads.emplace_back(incrementElements, std::ref(arr), start, end);
}
for (auto& thread : threads) {
thread.join();
}
// 打印部分数组内容
for (int i = 0; i < 10; ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
clock_t ed = clock();
double timeSpan = (ed - st) * 1.0 / CLOCKS_PER_SEC;
std::cout << "time cost1: " << timeSpan << "s" << std::endl;
st = clock();
incrementElements(arr, 0, ARRAY_SIZE);
for (int i = 0; i < 10; ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
ed = clock();
timeSpan = (ed - st) * 1.0 / CLOCKS_PER_SEC;
std::cout << "time cost2: " << timeSpan << "s" << std::endl;
return 0;
}
c++多线程加速耗时的for循环
最新推荐文章于 2024-06-04 14:00:40 发布
文章通过C++代码展示了如何使用多线程加速数组元素递增操作,并对比了多线程与单线程的时间成本。实验表明,在某些情况下,多线程可以提高执行速度。
摘要由CSDN通过智能技术生成