gpt4 book ai didi

c++ - clang 3.0 + libc++ 中的 std::async 不起作用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:28:47 26 4
gpt4 key购买 nike

我刚刚在我的 ubuntu 10.04 上编译并安装了 clang+llvm 3.0,还有来自 svn 的 libc++。由于 libc++ 中的状态显示线程支持已完成,我想尝试 std::async。所以我按照 Anthony Williams 在

http://www.justsoftwaresolutions.co.uk/threading/multithreading-in-c++0x-part-8-futures-and-promises.html

只需稍作改动即可编译:

#include <future>
#include <iostream>

int calculate_the_answer_to_LtUaE()
{
return 42;
}

void do_stuff()
{
std::cout << "doing stuff" << std::endl;
}

int main()
{
std::future<int> the_answer=std::async(calculate_the_answer_to_LtUaE);
do_stuff();
std::cout<<"The answer to life, the universe and everything is "
<<the_answer.get()<<std::endl;
}

我用

编译

clang++ --std=c++0x -stdlib=libc++ -lpthread async.cpp

但是,它运行并总是以核心转储结束:

做事生命、宇宙和一切的答案都已中止(核心已转储)

我检查了核心转储,它显示了这样的堆栈(我不太明白这一点)

#0  0x00007fd0a1a7ba75 in raise () from /lib/libc.so.6#1  0x00007fd0a1a7f5c0 in abort () from /lib/libc.so.6#2  0x00007fd0a22a735b in std::exception_ptr::~exception_ptr (this=) at ../src/exception.cpp:130#3  0x0000000000404178 in void std::__1::__assoc_state::set_value(int&&) ()#4  0x00000000004051ae in _ZNSt3__119__async_assoc_stateIiNS_12__async_funcIPFivEJEEEE9__executeEv ()#5  0x0000000000404e00 in _ZNSt3__114__thread_proxyINS_5tupleIJMNS_19__async_assoc_stateIiNS_12__async_funcIPFivEJEEEEEFvvEPS7_EEEEEPvSC_ ()#6  0x00007fd0a250f9ca in start_thread () from /lib/libpthread.so.0#7  0x00007fd0a1b2e70d in clone () from /lib/libc.so.6#8  0x0000000000000000 in ?? ()

有人知道为什么吗?

最佳答案

我在 OS X Lion 上运行你的示例,使用:

clang++ -std=c++0x -stdlib=libc++ async.cpp

程序输出:

doing stuff
The answer to life, the universe and everything is 42

按照 moshbear 评论的建议检查 libc++ 的源代码,我看到了:

exception_ptr::~exception_ptr() _NOEXCEPT
{
#if HAVE_DEPENDENT_EH_ABI
__cxa_decrement_exception_refcount(__ptr_);
#else
#warning exception_ptr not yet implemented
::abort();
#endif // __APPLE__
}

在我看来,~exception_ptr() 还没有移植到 ubuntu 10.04。这是一种无法在可移植 C++ 中实现的低级工具。在 libc++abi 上创建此级别的无 GPL 实现的工作正在进行中。 .我可以向你保证,libc++abi 目前还没有准备好迎接黄金时段。

这个低级库也有独立的努力:https://github.com/pathscale/libcxxrt .我不知道这个库的状态,也不知道它是否已经移植到 ubuntu。

关于c++ - clang 3.0 + libc++ 中的 std::async 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8408677/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com