Здравствуйте, Иван Дубров, Вы писали:
_>>Ну вот тебе компилируемый пример на C++ с защитой набора разделяемых данных мьютексом:
_>>_>>int global_shared=1;
_>>int main()
_>>{
_>> int local_shared=1;
_>> vector<thread> pool;
_>> mutex m;
_>> for(int i=0; i<30; i++) pool.emplace_back([&]{
_>> lock_guard<mutex> lock(m);
_>> auto sum=global_shared+local_shared;
_>> global_shared=local_shared;
_>> local_shared=sum;
_>> cout<<global_shared<<' ';
_>> });
_>> for(auto& t: pool) t.join();
_>>}
_>>
_>>Можно увидеть его точный аналог на Rust, с размещением данных внутри мьютекса? )
ИД>Что произойдёт в этом коде, если поток номер 15 выбросит исключение на "t.join()" (вернее, "t.join" для потока №15 выбросит исключение)? Для драматичности давай считать, что "main" -- это какая-то функция внутри большой системы.
Ну т.к. у меня не стоит своего обработчика прерываний, то будет вызван стандартный, который вызовет завершение приложения. Непонятно только к чему ты спросил такую очевидную вещь.
ИД>Или, например, "emplace_back" не сможет выделить память для последнего потока и тоже выбросит исключение.
Аналогично пункту выше. И опять же что с того?