下面的最小示例说明了在并行初始化容器时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;
            printf("%d\t%p\n", omp_get_thread_num(), &v);
    }
    return EXIT_SUCCESS;
}碰上
[STXXL-ERROR] File too large 或
[SYSTEM-ERROR]Segmentation fault如何在多个线程中分配stxxl容器?
发布于 2015-10-22 15:55:22
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;
}https://stackoverflow.com/questions/33285327
复制相似问题