Содержание
- 2. Concurrency Несколько вычислительных ядер процессора позволяют выполнять несколько задач одновременно. Одно ядро процессора может выполнять несколько
- 3. Два вида многозадачности Multiple processes Multiple threads
- 4. За чем применять многозадачность? Разделение программы на независимые части. Один процесс выполняет одну задачу (например, взаимодействие
- 5. Hello World! CPP_Examples18 #include #include void hello() { std::cout } int main(int argc,char * argv[]){ std::thread
- 6. Передаем объекты в поток CPP_Examples19 std::unique_ptr – позволяет иметь только одну ссылку на объект. Его нельзя
- 7. Полезные функции std::thread::hardware_concurrency() Возвращает количество Thread которые могут выполняться параллельно для данного приложения. std::this_thread::get_id() Возвращает идентификатор
- 8. Как дождаться завершения потока красиво? CPP_Examples20 std::for_each – позволяет применять функцию к элементам коллекции template Function
- 9. Проблемы работы с динамическими структурами данных в многопоточной среде При удалении элемента из связанного списка производится
- 10. Mutex CPP_Examples23 Мьютекс — базовый элемент синхронизации и в С++11 представлен в 4 формах в заголовочном
- 11. Потоко-безопасный Stack CPP_Examples21 Классы «обертки» позволяют непротиворечиво использовать мьютекс в RAII-стиле с автоматической блокировкой и разблокировкой
- 12. Deadlock std::lock_guard lock(a); std::lock_guard lock(b); std::lock_guard lock(b); std::lock_guard lock(a); Возникает когда несколько потоков пытаются получить доступ
- 13. Exceptions в многопоточной среде CPP_Examples_22 Исключения между потоками не передаются! Нужно устроить хранилище исключений, для того
- 14. Условные переменные CPP_Examples24,25 condition_variable требует от любого потока перед ожиданием сначала выполнить std::unique_lock condition_variable_any более общая
- 15. Lambda CPP_Examples26 Лямбда-выражения в C++ — это краткая форма записи анонимных функторов. Например: [](int _n) {
- 16. Лямбда функции могут возвращать значения CPP_Examples27 В случае, если в лямбда-функции только один оператор return то
- 17. Захват переменных из внешнего контекста CPP_Examples28 [] // без захвата переменных из внешней области видимости [=]
- 18. Генерация лямбда-выражений CPP_Examples29 Начиная со стандарта C++11 шаблонный класс std::function является полиморфной оберткой функций для общего
- 19. Атомарные операции Атомарность означает неделимость операции. Это значит, что ни один поток не может увидеть промежуточное
- 20. Атомарные типы C++ #include std::atomic_bool //bool std::atomic_char //char std::atomic_schar //signed char std::atomic_uchar //unsigned char std::atomic_int //int
- 21. Основные операции load() //Прочитать текущее значение store() //Установить новое значение exchange() //Установить новое значение и вернуть
- 22. Метод atomic::compare_exchange_weak bool compare_exchange_weak( Ty& Exp, Ty Value) Сравнивает значения которые хранится в *this с Exp.
- 23. Потокобезопасный Stack CPP_Examples30 void push(const T& data) { node* new_node = new node(data, head.load()); while (!head.compare_exchange_weak(
- 25. Скачать презентацию