Моя программа на C++ (работающая в Mac OS) была убита. После запуска отладчиком получаю следующее:
Process 90937 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGKILL
frame #0: 0x000000010001fc50 captureISO`tbb::interface9::internal::start_for<WDutils::Parallel::details::blocked_range_terminating<unsigned long>, (anonymous namespace)::simulations::sampleSome(bool)::$_2, tbb::auto_partitioner const>::run_body(WDutils::Parallel::details::blocked_range_terminating<unsigned long>&) [inlined] tbb::concurrent_vector<(anonymous namespace)::simulations::initialCondition, tbb::cache_aligned_allocator<(anonymous namespace)::simulations::initialCondition> >::push_back(this=0x00007fff5fbfebd0)::simulations::initialCondition const&) at concurrent_vector.h:846 [opt]
843 iterator push_back( const_reference item )
844 {
845 push_back_helper prolog(*this);
-> 846 new(prolog.internal_push_back_result()) T(item);
847 return prolog.return_iterator_and_dismiss();
848 }
849
Таким образом, похоже, что сигнал уничтожения был выдан при распределении в пределах tbb::concurrent_vector<>
. Однако ни документация для tbb::concurrent_vector::push_back()
, ни документация для оператор new
предлагает такое действие.
Является ли это недокументированным поведением TBB (предпочитаю завершить запущенный процесс, потому что TBB не может правильно обрабатывать с исключениями)? Как узнать и как этого избежать?