Информация об изменениях

Сообщение Re[12]: Безопасность Rust от 13.05.2019 16:42

Изменено 13.05.2019 16:44 Иван Дубров

Re[56]: Сполски
Здравствуйте, alex_public, Вы писали:

_>Ну вот тебе компилируемый пример на 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++ с защитой набора разделяемых данных мьютексом:

_>
_>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" не сможет выделить память для последнего потока и тоже выбросит исключение.