Презентация Параллельное программирование. С. Thread Support Library. Atomic Operations Library онлайн

На нашем сайте вы можете скачать и просмотреть онлайн доклад-презентацию на тему Параллельное программирование. С. Thread Support Library. Atomic Operations Library абсолютно бесплатно. Урок-презентация на эту тему содержит всего 53 слайда. Все материалы созданы в программе PowerPoint и имеют формат ppt или же pptx. Материалы и темы для презентаций взяты из открытых источников и загружены их авторами, за качество и достоверность информации в них администрация сайта не отвечает, все права принадлежат их создателям. Если вы нашли то, что искали, отблагодарите авторов - поделитесь ссылкой в социальных сетях, а наш сайт добавьте в закладки.
Презентации » Устройства и комплектующие » Параллельное программирование. С. Thread Support Library. Atomic Operations Library



Оцените!
Оцените презентацию от 1 до 5 баллов!
  • Тип файла:
    ppt / pptx (powerpoint)
  • Всего слайдов:
    53 слайда
  • Для класса:
    1,2,3,4,5,6,7,8,9,10,11
  • Размер файла:
    1.18 MB
  • Просмотров:
    53
  • Скачиваний:
    0
  • Автор:
    неизвестен



Слайды и текст к этой презентации:

№1 слайд
Параллельное программирование
Содержание слайда: Параллельное программирование С++. Thread Support Library. Atomic Operations Library.

№2 слайд
Развитие параллельного
Содержание слайда: Развитие параллельного программирования в С++ Posix threads pthread_create Windows Threads CreateThread OpenMPI omp parallel С++ Thread Support & Atomic Operations Libraries Нужна минимум VS2012 (лучше VS2015) GCC 4.8.1 Или 100 евро, чтобы купить just::thread

№3 слайд
std thread std thread
Содержание слайда: std::thread std::thread – стандартный класс потока это не конкурент Windows и/или POSIX потокам это обертка, которая внутри использует либо Windows-потоки, либо POSIX-потоки в зависимости от компилятора и платформы

№4 слайд
Простой пример для std thread
Содержание слайда: Простой пример для std::thread #include <thread> void ThreadProc() { printf(“Inside thread = %d”, std::this_thread::get_id()); } std::thread t(ThreadProc); … t.join();

№5 слайд
Обработка исключений Любое
Содержание слайда: Обработка исключений Любое исключение – вылет, падение Привет исключениям по любому поводу, Boost! void ThreadProc() { try { // вычисления } catch (…) { // обработка исключения } }

№6 слайд
Копирование потоков std
Содержание слайда: Копирование потоков std::thread Прямое копирование – ошибка компиляции std::thread t(ThreadFunc); t2 = t; std::thread t3(t); std::thread t2(std::move(t)); // t невалидно std::thread& t3 = t2; // валидно t2 и t3, но // это один и тот же // объект

№7 слайд
Всегда надо join до
Содержание слайда: Всегда надо join до пропадания std::thread из области видимости #include <thread> void ThreadProc() { printf(“Inside thread = %d”, std::this_thread::get_id()); } std::thread t(ThreadProc); … t.join();

№8 слайд
Function objects Второй
Содержание слайда: Function objects Второй способ создания объектов std::thread class FuncObject { public: void operator() (void) { cout << this_thread::get_id() << endl; } }; FuncObject f; std::thread t( f );

№9 слайд
Лямбда-выражения
Содержание слайда: Лямбда-выражения

№10 слайд
Потоки через лямбда-функции
Содержание слайда: Потоки через лямбда-функции + передача параметров в потоки

№11 слайд
Лямбда-функции vs обычные
Содержание слайда: Лямбда-функции vs обычные функции vs Function objects Разница в читаемости – на любителя При использовании лямбда-функций есть накладные расходы на создание объекта При использовании function objects тоже есть накладные расходы на создание объекта

№12 слайд
Методы std thread joinable
Содержание слайда: Методы std::thread joinable – можно ли ожидать завершения потока (находимся ли мы в параллельном относительно этого потоке) get_id – возвращает ID потока native_handle – возвращает хендл потока (зависит от работающей реализации потоков) hardware_concurency – сколько потоков одновременно могут работать

№13 слайд
Методы std thread join
Содержание слайда: Методы std::thread join – ожидать завершения потока detach – разрешить потоку работать вне зависимости от объекта std::thread swap – поменять два потока местами std::swap – работает с объектами типа std::thread

№14 слайд
Методы std this thread yield
Содержание слайда: Методы std::this_thread yield – дать поработать другим потокам get_id – вернуть ID текущего потока sleep_for – «заснуть» на заданное время sleep_until – «заснуть» до заданного времени std::chrono::milliseconds duration(2000); std::this_thread::sleep_for(duration);

№15 слайд
Недостатки std thread Нет
Содержание слайда: Недостатки std::thread Нет thread affinity Нет размера стека для MSVC 2010 и выше не актуально Нет завершения потока в pthread есть вполне приемлимая реализация Нет статуса работы потока Нет кода выхода потоковой функции

№16 слайд
std future Future это
Содержание слайда: std::future Future – это высокоуровневая абстракция Вы начинаете асинхронную операцию Вы возвращаете хендл, чтобы ожидать результат Создание потоков, ожидание выполнение, исключения и пр – делаются автоматически

№17 слайд
std async std future
Содержание слайда: std::async + std::future

№18 слайд
Где работает асинхронная
Содержание слайда: Где работает асинхронная операция? «Ленивое» исполнение в главном потоке future<T> f1 = std::async( std::launch::deferred, []() -> T {...} ); Выполнение в отдельном потоке future<T> f2 = std::async( std::launch::async, []() -> T {...} ); Пусть система решит, она умнее future<T> f3 = std::async( []() -> T {...} );

№19 слайд
Wait For Аналог try-to-lock
Содержание слайда: Wait For Аналог try-to-lock std::future<int> f; …. auto status = f.wait_for(std::chrono::milliseconds(10)); if (status == std::future_status::ready) { }

№20 слайд
std shared future Аналог std
Содержание слайда: std::shared_future Аналог std::future, но позволяет копировать себя и позволяет ожидать себя нескольким потокам Например, чтобы можно было протащить future в несколько потоков и ждать его во всех них. Метод share объекта std::future возвращает эквивалентный std::shared_future

№21 слайд
Методы std future std shared
Содержание слайда: Методы std::future / std::shared_future wait – ждать результат get – получить результат wait_for – ожидать результат с таймаутом wait_until – ожидать результат максимум до заданного момента

№22 слайд
std packaged task std
Содержание слайда: std::packaged_task std::packaged_task<int(int,int)> task([](int a, int b) { return std::pow(a, b); }); std::future<int> result = task.get_future();   task(2, 9); std::packaged_task<int(int,int)> task(f); std::future<int> result = task.get_future(); task(); std::packaged_task<int()> task(std::bind(f, 2, 11)); std::future<int> result = task.get_future();   task();

№23 слайд
Зачем нужен std packaged
Содержание слайда: Зачем нужен std::packaged_task? Реиспользование Разная реализация Запуск на разных данных

№24 слайд
Методы std packaged task
Содержание слайда: Методы std::packaged_task valid – возвращает, установлена ли функция swap – меняет два packaged_task местами get_future – возвращает объект future operator () – запускает функцию reset – сбрасывает результаты вычислений make_ready_at_thread_exit – запускает функцию, однако результат не будет известен до окончания работы текущего потока

№25 слайд
Promises std future дает
Содержание слайда: Promises std::future дает возможность вернуть значение из потока после завершения потоковой функции std::promise это объект, который можно протащить в потоковую функцию, чтобы вернуть значение из потока до завершения потоковой функции

№26 слайд
std promise void ThreadProc
Содержание слайда: std::promise void ThreadProc(std::promise<int>& promise) { … promise.set_value(2));    //-- (3) … } std::promise<int> promise; //-- (1) std::thread thread(ThreadProc, std::ref(promise)); //-- (2) std::future<int> result(promise.get_future()); //-- (4) printf(“thread returns value = %d”, result.get()) //-- (5)

№27 слайд
Методы std promise operator -
Содержание слайда: Методы std::promise operator == - можно копировать swap – обменять местами set_value – установить возвращаемое значение set_value_at_thread_exit – установить возвращаемое значение, но сделать его доступным только когда поток завершится set_exception – сохранить исключение, которое произошло set_exception_at_thread_exit – сохранить исключение, но сделать его доступным только после окончания работы потока

№28 слайд
Locking
Содержание слайда: Locking

№29 слайд
Smart locking
Содержание слайда: “Smart” locking

№30 слайд
Методы std mutex lock
Содержание слайда: Методы std::mutex lock – захватить мьютекс unlock – освободить мьютекс try_lock – попробовать захватить мьютекс с таймаутом 0 секунд и возвратить, успешно или нет native_handle – хендл мьютекса (зависит от реализации)

№31 слайд
Другие виды мьютексов std
Содержание слайда: Другие виды мьютексов std::timed_mutex – мьютекс, который можно попробовать захватить с ненулевым таймаутом std::recursive_mutex – мьютекс, который может быть многократно захвачен одним и тем же потоком std::recursive_timed_mutex – смесь std::timed_mutex и std::recursive_mutex

№32 слайд
Методы для timed мьютексов
Содержание слайда: Методы для timed мьютексов try_lock_for – попытка захватить мьютекс с заданным таймаутом и возвратом успешности операции try_lock_until – попытка захватить мьютекс максимум до заданного времени и возвратом успешности операции

№33 слайд
std shared timed mutex C
Содержание слайда: std::shared_timed_mutex (C++ 14) Объект, который позволяет эксклюзивно захватывать мьютекс и неэксклюзивно. Если мьютекс захвачен эксклюзивно, то неэксклюзивно захватить его нельзя (ожидание). Обратное верно. Неэксклюзивный захват может быть из нескольких потоков одновременно

№34 слайд
std shared timed mutex Зачем
Содержание слайда: std::shared_timed_mutex Зачем нужно? На чтение защищенный ресурс можно открыть из нескольких потоков без возникновения проблем На запись можно открыть только одному потоку, причем чтобы в этот момент никто не читал – чтобы проблем не было

№35 слайд
std shared timed mutex
Содержание слайда: std::shared_timed_mutex Эксклюзивный доступ lock try_lock try_lock_for try_lock_until unlock

№36 слайд
std shared timed mutex
Содержание слайда: std::shared_timed_mutex Неэксклюзиный доступ lock_shared try_shared_lock try_shared_lock_for try_shared_lock_until unlock_shared

№37 слайд
Общие алгоритмы захвата std
Содержание слайда: Общие алгоритмы захвата std::lock std::lock(mutex1, mutex2, …, mutexN); std::try_lock – c нулевым таймаутом std::try_lock(mutex1, mutex2, …, mutexN);

№38 слайд
std call once amp std once
Содержание слайда: std::call_once & std::once_flag std::once_flag flag;   void do_once() { std::call_once(flag, []() { printf(“called once”); }); }   std::thread t1(do_once); std::thread t2(do_once); t1.join(); t2.join();

№39 слайд
Умные указатели для
Содержание слайда: Умные указатели для примитивов синхронизации Для обоих нельзя копировать, можно переносить. Различия std::unique_lock – обертка для эксклюзивного доступа std::shared_lock (C++ 14) – обертка для неэксклюзивного доступа

№40 слайд
Методы std shared lock std
Содержание слайда: Методы std::shared_lock / std::unique_lock operator = разблокирует текущий мьютекс и становится оберткой над новым lock try_lock try_lock_for try_lock_until unlock

№41 слайд
Методы std shared lock std
Содержание слайда: Методы std::shared_lock / std::unique_lock swap – обменять примитив синхронизации с другим объектом ?_lock release – отсоединить текущий примитив синхронизации без unlock mutex – возвращает ссылку на текущий примитив синхронизации owns_lock – возвращает true, если управляет примитивом синхронизации

№42 слайд
Стратегии захвата примитива
Содержание слайда: Стратегии захвата примитива синхронизации в конструкторе std::lock_guard<std::mutex> lock1(m1, std::adopt_lock); std::lock_guard<std::mutex> lock2(m2, std::defer_lock); std::defer_lock – не захватывать мьютекс std::try_to_lock – попробовать захватить с нулевым таймаутом std::adopt_lock – считать, что текущий поток уже захватил мьютекс

№43 слайд
Событие std condition
Содержание слайда: Событие: std::condition_variable notify_one – уведомить о событии 1 поток notify_all – уведомить о событии все потоки wait – ждать события wait_for – ждать события с таймаутом wait_until – ждать события не дольше, чем до заданного времени native_handle – вернуть хендл события (зависит от реализации)

№44 слайд
std atomic
Содержание слайда: std::atomic

№45 слайд
std atomic lt T gt Шаблонный
Содержание слайда: std::atomic<T> Шаблонный тип данных для цифровых переменных (char, short, int, int64, etc) и указателей Почти всегда lock-free, а если и не lock-free, то не требует написания lock-ов вами. Главное отличие – гонки данных исключены. Зато возможные операции крайне ограничены.

№46 слайд
std atomic operator
Содержание слайда: std::atomic operator = приравнивает один атомик другому is_lock_free – возвращает, является ли реализация для этого типа данных lock free store – загружает в атомик новое значение load – получает из атомика значение exchange – заменяет значение атомика и возвращает прошлое значение

№47 слайд
std atomic fetch add, fetch
Содержание слайда: std::atomic fetch_add, fetch_sub, fetch_and, fetch_or, fetch_xor – выполняет сложение, вычитание, логические И, ИЛИ, XOR и возвращает предыдущее значение operator++ operator++(int) operator-- operator--(int) operator+= operator-= operator&= operator|= operator^=

№48 слайд
std atomic flag operator -
Содержание слайда: std::atomic_flag operator = - присвоение clear – сброс флага в false test_and_set – устанавливает флаг в true и возвращает предыдущее значение

№49 слайд
Что еще есть в C Atomic
Содержание слайда: Что еще есть в C++ 11 Atomic Operations Library? Дублирование всех методов внешними операциями (.swap -> std::swap) Compare And Swap (CAS) И еще много всего для тех, кто слишком хорошо понимает, что делает

№50 слайд
Общие впечатления Шаг вперед
Содержание слайда: Общие впечатления Шаг вперед по адекватности и однообразию Местами шаг назад. Сравните Sleep(100) и std::chrono::milliseconds duration(100); std::this_thread::sleep_for(duration);

№51 слайд
Общие впечатления Впервые
Содержание слайда: Общие впечатления Впервые потоки, примитивы синхронизации стандартизированы Некоторые устоявшиеся термины и подходы исключены (семафор; код, возвращаемый потоковой функцией; принудительное завершение потока; thread affinity; размер стека) Некоторые совсем Для некоторых непривычные аналоги

№52 слайд
Общие впечатления В целом
Содержание слайда: Общие впечатления В целом функциональности много, есть полезные нововведения, которые позволяют свести необходимость программировать синхронизацию к нулю. Однако, с другой стороны отсутствие определенной функциональности, мягко говоря, смущает.

№53 слайд
Вопросы
Содержание слайда: Вопросы

Скачать все slide презентации Параллельное программирование. С. Thread Support Library. Atomic Operations Library одним архивом: