Có phải GCC 4.7.0 hay là tôi? Tôi làm gì sai?C++ 0x: chủ đề, gcc hoặc lỗi của tôi?
này ném một std::system_error
"hoạt động không được phép" ngoại lệ:
struct DumbFib {
size_t operator()(size_t n) { return fib(n); }
static size_t fib(size_t n) {
return n<2 ? 1 : fib(n-2)+fib(n-1);
}
};
void sample() {
DumbFib dumbfib;
thread th{ dumbfib, 35 }; // <- system_error!
th.join();
};
trong khi làm việc này:
void work(size_t loop) {
for(int l = loop; l>0; --l) {
for(int i = 1000*1000; i>0; --i)
;
cerr << l << "...";
}
cerr << endl;
}
int main() {
//sample();
thread t { work, 100 }; // <- fine
t.join();
}
Sự khác biệt là, tất nhiên:
- này không -ngã chế biến sử dụng Functor (lớp học với
operator()
) - Mã làm việc sử dụng một con trỏ hàm.
Tôi có sử dụng functor sai, ở đâu đó không? Tôi không thể nhìn thấy ở đâu, phải không? Có một gợi ý rằng gdb
có này trong stack của nó:
#7 ... in std::thread::_M_start_thread (..., __b=warning: RTTI symbol not found\
for class 'std::_Sp_counted_ptr_inplace<std::thread::_Impl<std::\
_Bind_simple<DumbFib()(int)> >, ..., (__gnu_cxx::_Lock_policy)2>
Ghi chú: Tôi cũng đã cố gắng
- Initialize
DumbFib
đầu tiên, cho nó một kết quả tương tự thành viên biếnn_=35
,. - Cho các functor trực tiếp với
thread th{ DumbFib, 35 };
hoặcthread th{ DumbFib{}, 35 };
Bạn đang chạy hệ thống này trên hệ thống nào? – Jason
linux 64bit (ubuntu 10.4 LTS), gcc-4.7.0, svn checkout từ tuần trước. – towi