首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程排序C++ (无活动异常终止调用)

多线程排序C++ (无活动异常终止调用)
EN

Stack Overflow用户
提问于 2020-03-01 11:29:58
回答 1查看 67关注 0票数 0

刚开始在c++中学习多线程,并想对它进行实验。因此,我试图将数组拆分为物理核(nt-变量)的数量,对独立线程上的每个部分进行排序,然后合并它们,但是我得到了没有活动异常的错误终止调用。

代码语言:javascript
复制
void MergeSortV5(int *v,int ii,int is,int nt)
{

    int lp=is/nt;
    thread t[nt-1];
    int ai,as=0;
    for(int i=0; i<nt-1; i++)
    {
        ai=as+1;
        as=ai+lp-1;
        t[i]=thread (MergeSortV2,v,ai,as);
    }
    ai=as+1;
    as=is;
    t[nt-1]=thread (MergeSortV2,v,ai,as);
    for(int i=0; i<nt; i++)
            t[i].join();
}

MergeSortV2是一个常规的合并排序。据我所知,造成此异常的原因是线程完成速度快于主程序(在我尝试过的小型数组示例中无疑是如此),但我似乎无法修复它,我尝试了分离线程并在稍后加入它们,如果是占有性的,或者可以灵活地加入它们,但是错误仍然会发生。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-01 11:55:06

T数组分配的大小不对(nt而不是nt-1)。此外,请考虑使用动态分配的数组,因为nt不是在编译时定义的(有关更多信息,请参见here )。

代码语言:javascript
复制
thread* t = new thread[nt];
[...]
delete[] t;

或者更好的事件:一个std::vector<std::thread>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60474602

复制
相关文章

相似问题

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