Ral*_*ang 6 c++ multithreading clang c++11 libc++
我刚刚在我的ubuntu 10.04上编译并安装了clang + llvm 3.0,以及来自svn的libc ++.由于libc ++中的状态显示线程支持已完成,我想尝试std :: async.所以我按照Anthony Williams给出的例子
只需做一些小改动就可以编译:
#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;
}
Run Code Online (Sandbox Code Playgroud)
我编译
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
Run Code Online (Sandbox Code Playgroud)
并且程序输出:
doing stuff
The answer to life, the universe and everything is 42
Run Code Online (Sandbox Code Playgroud)
按照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__
}
Run Code Online (Sandbox Code Playgroud)
在我看来,~exception_ptr()还没有移植到ubuntu 10.04.这是一个在便携式C++中无法实现的低级设施.libc ++ abi正在努力创建这个级别的无GPL实现.我可以向你保证,libc ++ abi目前尚未准备好迎接黄金时段.
这个低级库还有一个独立的工作:https: //github.com/pathscale/libcxxrt.我不知道这个库的状态,也不知道它是否被移植到ubuntu.
| 归档时间: |
|
| 查看次数: |
2967 次 |
| 最近记录: |