我有一个关于如何分发线程的问题: 在omp并行部分中有两个部分,一个是for循环(可以改为while循环),它用于分析我的数据并将它们插入到双端队列中,这部分很耗时因此我需要大部分的线程同时执行此任务。另一部分是使用双端队列,将数据保存到磁盘并弹出双端队列。第二部分必须只用一个线程完成,因为它不耗时,我需要连续完成。第二部分设计为在非空时消耗双端队列。
这是我的代码的一个划痕,我知道它不正确但我不知道如何修复代码让它完全按照我想要的方式执行。提前致谢:
std::deque < outCCRec > CCRec_list;
#pragma omp parallel sections num_threads(12)
{
#pragma omp section
#pragma omp parallel for schedule(dynamic, 1) private(i)
for (i=0; i<SIZE; i++)
{
// Need 11 thread to do this section
// Analyze data and save it to the CCRec_list deque
}
#pragma omp section
{
// Need one thread to do this section,
// Consume the data in CCRec_list deque and save them to
disk, and then pop the deque
}
}