Tôi vừa biên soạn và cài đặt clang + llvm 3.0 trên ubuntu 10.04 của tôi, và cũng libC++ từ svn. Khi trạng thái trong libC++ hiển thị hỗ trợ luồng hoàn tất, tôi muốn thử std :: async. Vì vậy, tôi làm theo tấm gương do Anthony Williams trongstd :: async trong clang 3.0 + libC++ không hoạt động?
Và chỉ thực hiện thay đổi nhỏ để làm cho nó biên dịch:
#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;
}
Và tôi biên dịch với
kêu vang ++ --std = C++ 0x -stdlib = libC++ -lpthread async.cpp
Tuy nhiên, nó chạy và luôn luôn kết thúc bằng kết xuất lõi:
làm công cụ Câu trả lời cho cuộc sống, vũ trụ và mọi thứ bị hủy bỏ (core dumped)
tôi kiểm tra các bãi chứa lõi và nó cho thấy chồng như thế này (mà tôi không hoàn toàn nhận được một gợi ý)
#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 ??()
Bất kỳ ai cũng có ý tưởng tại sao?
Việc hủy bỏ có nghĩa là xác nhận đã không thành công. Nhìn vào assert() s trong exception.cpp gần dòng 130. Sử dụng gdb để phá vỡ hủy bỏ và phân tích người dân địa phương được khuyến khích mạnh mẽ. – moshbear