Prosty test, który działa niepoprawnie pod ubuntu.
gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| #include <future>;
#include <iostream>;
int foo()
{
sleep( 5 );
return 42;
}
int main()
{
std::future<int>; result = std::async(std::launch::async, foo );
std::cout << result.get() << std::endl;
std::cin.get();
return 0;
}
|
Wykonanie kończy się przez core dump. Pod gdb na razie widać tyle:
GNU gdb (Ubuntu/Linaro 7.2-1ubuntu11) 7.2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
(gdb) start
Temporary breakpoint 1 at 0x41baad
Starting program: /home/makhzi/Pulpit/workspace/@szkolenia/async-test/async-test
Temporary breakpoint 1, 0x000000000041baad in main ()
(gdb) s
Single stepping until exit from function main,
which has no line number information.
terminate called after throwing an instance of 'std::system_error'
what():
Program received signal SIGABRT, Aborted.
0x00007ffff72d9d05 in raise (sig=6)
at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
64 ../nptl/sysdeps/unix/sysv/linux/raise.c: Nie ma takiego pliku ani katalogu.
in ../nptl/sysdeps/unix/sysv/linux/raise.c
(gdb) info stack
#0 0x00007ffff72d9d05 in raise (sig=6)
at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1 0x00007ffff72ddab6 in abort () at abort.c:92
#2 0x00007ffff7b916dd in __gnu_cxx::__verbose_terminate_handler() ()
from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3 0x00007ffff7b8f926 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4 0x00007ffff7b8f953 in std::terminate() ()
from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5 0x00007ffff7b8fa5e in __cxa_throw ()
from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x00007ffff7b3a77a in std::__throw_system_error(int) ()
from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#7 0x000000000041c6d1 in void std::call_once<std::_Mem_fn<void (std::__future_base::_State::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>; ()()>;&, bool&)>;, std::__future_base::_State* const, std::reference_wrapper<std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>; ()()>; >;, std::reference_wrapper<bool>; >;(std::once_flag&, std::_Mem_fn<void (std::__future_base::_State::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>; ()()>;&, bool&)>;, std::__future_base::_State* const&&, std::reference_wrapper<std::function<std::unique_ptr<std::__futu---Type <return>; to continue, or q <return>; to quit---info stack
re_base::_Result_base, std::__future_base::_Result_base::_Deleter>; ()()>; >;&&, std::reference_wrapper<bool>;&&) ()
#8 0x000000000041c16e in std::__future_base::_State::_M_set_result(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>; ()()>;, bool) ()
#9 0x0000000000421fc2 in std::__future_base::_Deferred_state<int>;::_M_run_deferred() ()
#10 0x000000000041c006 in std::__future_base::_State::wait() ()
#11 0x000000000041d20f in std::__basic_future<int>;::_M_get_result() ()
#12 0x000000000041c8dc in std::future<int>;::get() ()
#13 0x000000000041bacf in main ()</pre>
|