Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在并行分区中为每个分区分配线程_C++_Multithreading_Parallel Processing_Openmp - Fatal编程技术网

C++ 如何在并行分区中为每个分区分配线程

C++ 如何在并行分区中为每个分区分配线程,c++,multithreading,parallel-processing,openmp,C++,Multithreading,Parallel Processing,Openmp,我有一个关于如何分发线程的问题: omp并行部分中有两个部分,一个是for循环(可以更改为while循环),用于分析数据并将其插入到deque中,此部分非常耗时,因此我需要大多数线程同时执行此任务。另一部分是使用deque,将数据保存到磁盘并弹出deque。第二部分必须只使用一个线程来完成,因为它并不耗时,而且我需要按顺序完成。第二部分设计用于在deque不为空时使用它 这里是我的代码的一个划痕,我知道它是不正确的,但我不知道如何修复代码,让它完全按照我想要的做。提前感谢: std::deque

我有一个关于如何分发线程的问题: omp并行部分中有两个部分,一个是for循环(可以更改为while循环),用于分析数据并将其插入到deque中,此部分非常耗时,因此我需要大多数线程同时执行此任务。另一部分是使用deque,将数据保存到磁盘并弹出deque。第二部分必须只使用一个线程来完成,因为它并不耗时,而且我需要按顺序完成。第二部分设计用于在deque不为空时使用它

这里是我的代码的一个划痕,我知道它是不正确的,但我不知道如何修复代码,让它完全按照我想要的做。提前感谢:

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
            }
}
std::dequeCCRec\u列表;
#pragma omp并行段数_线程(12)
{
#pragma-omp段
#计划(动态,1)专用(i)的pragma omp并行

对于(i=0;我是否有一个互斥体或其他同步原语来保护您的
deque
?否则,您可能会有两个线程试图同时插入,或者其他类似的可能不好的情况……除非您碰巧在那里有一个完全线程安全的
std::deque
实现……我已经添加了一个关键的指令be所以我认为这可能不是问题。@twalberg