Re[13]: Безопасность Rust
От: alex_public  
Дата: 18.05.19 18:55
Оценка:
Здравствуйте, Иван Дубров, Вы писали:

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


Аналогично пункту выше. И опять же что с того?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.