首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >并行STXXL矢量初始化

并行STXXL矢量初始化
EN

Stack Overflow用户
提问于 2015-10-22 15:55:22
回答 1查看 282关注 0票数 1

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

代码语言:javascript
复制
#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;
}

碰上

代码语言:javascript
复制
[STXXL-ERROR] File too large 

代码语言:javascript
复制
[SYSTEM-ERROR]Segmentation fault

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-22 15:55:22

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

代码语言:javascript
复制
#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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33285327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档