Сообщение Re[12]: Безопасность Rust от 13.05.2019 16:42
Изменено 13.05.2019 16:44 Иван Дубров
Re[56]: Сполски
Здравствуйте, alex_public, Вы писали:
_>Ну вот тебе компилируемый пример на C++ с защитой набора разделяемых данных мьютексом:
_>
_>Можно увидеть его точный аналог на Rust, с размещением данных внутри мьютекса? )
Что произойдёт в этом коде, если поток номер 15 выбросит исключение на "t.join()"? Для драматичности давай считать, что "main" -- это какая-то функция внутри большой системы.
Или, например, "emplace_back" не сможет выделить память для последнего потока и тоже выбросит исключение.
_>Ну вот тебе компилируемый пример на 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()"? Для драматичности давай считать, что "main" -- это какая-то функция внутри большой системы.
Или, например, "emplace_back" не сможет выделить память для последнего потока и тоже выбросит исключение.
Re[12]: Безопасность Rust
Здравствуйте, alex_public, Вы писали:
_>Ну вот тебе компилируемый пример на C++ с защитой набора разделяемых данных мьютексом:
_>
_>Можно увидеть его точный аналог на Rust, с размещением данных внутри мьютекса? )
Что произойдёт в этом коде, если поток номер 15 выбросит исключение на "t.join()" (вернее, "t.join" для потока №15 выбросит исключение)? Для драматичности давай считать, что "main" -- это какая-то функция внутри большой системы.
Или, например, "emplace_back" не сможет выделить память для последнего потока и тоже выбросит исключение.
_>Ну вот тебе компилируемый пример на 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" не сможет выделить память для последнего потока и тоже выбросит исключение.