c++ - 并行 STXXL vector 初始化

标签 c++ multithreading parallel-processing openmp stxxl

以下最小示例说明了在并行初始化容器(使用 openMP)时 stxxl 的行为:

#include <omp.h>
#include <stdio.h>
#include <stxxl.h>

typedef stxxl::VECTOR_GENERATOR<float>::result VEC_T;

int main(int argc, char* argv[]) {
    const unsigned long NUM = 8;
    #pragma omp parallel num_threads(NUM) 
    {       
            VEC_T v;
            printf("%d\t%p\n", omp_get_thread_num(), &v);
    }
    return EXIT_SUCCESS;
}

遇到任何一个

[STXXL-ERROR] File too large 

[SYSTEM-ERROR]Segmentation fault

如何在多线程中分配 stxxl 容器?

最佳答案

stxxl 容器的初始化不是线程安全的,因此需要对初始化容器的线程进行互斥。使用 openMP,这将如下所示:

#include <omp.h>
#include <stdio.h>
#include <stxxl.h>

typedef stxxl::VECTOR_GENERATOR<float>::result VEC_T;

int main(int argc, char* argv[]) {
    const unsigned long NUM = 8;
    #pragma omp parallel num_threads(NUM) 
    {
            VEC_T* v;
            #pragma omp critical
            {
                    v = new VEC_T();
            }
            printf("%d\t%p\n", omp_get_thread_num(), &v);
            delete v;
    }
    return EXIT_SUCCESS;
}

关于c++ - 并行 STXXL vector 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33285327/

相关文章:

c++ - 变量模板的编译器问题

java - 'synchronized' 真的只是语法糖吗?

c# - P/Invoke 调用的方法是否在同一个线程中运行?

Pythonistas,请帮助将其转换为利用 Python 线程概念

haskell - 如何在 Haskell 中并行化从 stdin 延迟读取信息?

python - 在python中收集不同进程的结果

c++ - QTextEdit::setTextFormat(Qt::LogText) 不存在了,我还能用什么来记录?

c++ - ACE Reactor 在系统调用中断时退出

c++ - 如何在 Windows 7 的 C++ 中为虚拟文件夹创建快捷方式?

java - Android的decodeByteArray在自己的线程上非常慢,但在UI线程上却不是