C++我有10个deque数据, 我想要分别分到10个线程进行处理, 给出方案
时间: 2023-05-31 13:08:04 浏览: 156
实现方案如下:
1. 首先创建10个线程并行处理deque数据;
2. 将所有的deque数据存储在一个队列中,每个线程都从队列中获取数据进行处理;
3. 在每个线程的处理函数中,使用try-catch来确保线程安全,并使用pop_front()函数获取队列中的下一个deque数据进行处理;
4. 当队列中的所有数据都被处理完毕后,使用join()函数等待所有线程执行完毕。
下面是示例代码:
```
#include <iostream>
#include <deque>
#include <thread>
#include <mutex>
#include <queue>
using namespace std;
queue<deque<int>> q; // 存储所有的deque数据
mutex mtx; // 用于线程安全的互斥量
void process_data() {
while (true) {
deque<int> data;
{
lock_guard<mutex> lock(mtx);
if (q.empty()) { // 所有数据已经处理完毕,结束该线程
break;
}
data = q.front();
q.pop(); // 取出队列中的下一个deque数据
}
// 处理获取到的数据
for (int i = 0; i < data.size(); i++) {
data[i] = data[i] * 2;
}
}
}
int main() {
// 生成10个不同的deque数据并加入到队列中
for (int i = 0; i < 10; i++) {
deque<int> data;
for (int j = 0; j < 10; j++) {
data.push_back(j + 1);
}
q.push(data);
}
// 创建10个线程并行处理deque数据
vector<thread> threads;
for (int i = 0; i < 10; i++) {
threads.emplace_back(process_data);
}
// 等待所有线程执行完毕
for (auto& th : threads) {
th.join();
}
cout << "All data processed successfully." << endl;
return 0;
}
```
阅读全文