首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向量期货的g++4.8处理问题

向量期货的g++4.8处理问题
EN

Stack Overflow用户
提问于 2014-12-12 15:04:51
回答 1查看 166关注 0票数 1

下面是我的问题的一个barebone复制:

代码语言:javascript
复制
#include <vector>
#include <future>

using namespace std;

typedef unsigned Counter;
typedef vector<Counter> Counters;

Counters computer(int n)
{
    Counters result(n, 0);
    return result;
}

int main(void)
{
    int num_workers = 1;
    int n = 10;

    // set workers to work
    vector<future<Counters>> workers(num_workers);
    for (auto& worker : workers) worker = async(computer, n);

    // collect results
    Counters result (n,0);
    for (auto& worker : workers)
    {
        Counters partial = worker.get();
        for (size_t i = 0; i != partial.size(); i++) result[i] += partial[i];
    }

    return 0;
}

我必须在这里做一些明显的错事。令人讨厌的是,代码在MSVC2013和MinGW上在Win7下编译并运行良好,但是在Ubuntu上使用g++4.8产生了这种神秘的崩溃:

代码语言:javascript
复制
terminate called after throwing an instance of 'std::system_error'
  what():  Unknown error -1
Aborted (core dumped)

gdb增加了这一重要的智慧:

代码语言:javascript
复制
Program received signal SIGABRT, Aborted.
0x00132416 in __kernel_vsyscall ()

#0  0x00132416 in __kernel_vsyscall ()
#1  0x00272e0f in raise () from /lib/i386-linux-gnu/libc.so.6
#2  0x00276455 in abort () from /lib/i386-linux-gnu/libc.so.6
#3  0x0017fc65 in __gnu_cxx::__verbose_terminate_handler() ()
   from /usr/lib/i386-linux-gnu/libstdc++.so.6
#4  0x0017d943 in ?? () from /usr/lib/i386-linux-gnu/libstdc++.so.6
#5  0x0017d9bd in std::terminate() ()
   from /usr/lib/i386-linux-gnu/libstdc++.so.6
#6  0x0017dc81 in __cxa_throw () from /usr/lib/i386-linux-gnu/libstdc++.so.6
#7  0x001d7ebd in std::__throw_system_error(int) ()
   from /usr/lib/i386-linux-gnu/libstdc++.so.6
#8  0x0804a1cd in _ZSt9call_onceIMNSt13__future_base11_State_baseEFvRSt8functionIFSt10unique_ptrINS0_12_Result_baseENS4_8_DeleterEEvEERbEJKPS1_St17reference_wrapperIS8_ESF_IbEEEvRSt9once_flagOT_DpOT0_ ()
#9  0x08049beb in std::__future_base::_State_base::_M_set_result(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool) ()
#10 0x0804f274 in std::__future_base::_Deferred_state<std::_Bind_simple<std::vector<unsigned int, std::allocator<unsigned int> > (*(int))(int)>, std::vector<unsigned int, std::allocator<unsigned int> > >::_M_run_deferred() ()
#11 0x08049afd in std::__future_base::_State_base::wait() ()
#12 0x0804b20d in std::__basic_future<std::vector<unsigned int, std::allocator<unsigned int> > >::_M_get_result() const ()
#13 0x0804a7c6 in std::future<std::vector<unsigned int, std::allocator<unsigned int> > >::get() ()
#14 0x0804960c in main ()

这个错误是由第28行的worker.get();引起的。

我只在VM中使用Ubuntu来检查可移植性,而且我对本地调试环境并不十分熟悉,所以我没有深入研究它。

问题是:那里到底发生了什么事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-12 15:31:50

好吧,答案是:用-pthread编译这个,否则.

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

https://stackoverflow.com/questions/27446425

复制
相关文章

相似问题

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