Межпроцессное взаимодействие. Синхронизация потоков с использованием объектов ядра Windows 2000+ презентация
Содержание
- 2. Межпроцессное взаимодействие Синхронизация потоков с использованием объектов ядра Windows 2000+
- 3. Синхронизация потоков Простейшей формой коммуникации потоков является синхронизация (synchronization). Синхронизация означает
- 4. Объекты синхронизации и их состояния Объекты синхронизации (synchronization objects) – это
- 5. Объекты синхронизации MS Windows 2000+ и их состояния процессы потоки
- 6. Примеры функционирования объектов синхронизации Объект-поток находится в состоянии «занят» все время
- 7. Спящие потоки
- 8. Функции ожидания DWORD WaitForSingleObject( HANDLE hObject, DWORD dwMilliseconds );
- 9. Функция одиночного ожидания Первый параметр, hObject, идентифицирует объект ядра, поддерживающий синхронизацию.
- 10. Функция множественного ожидания Функция WaitForMultipleObjects позволяет ждать освобождения сразу нескольких объектов
- 11. Специализированные объекты синхронизации Событие Таймер ожидания Семафор Мьютекс
- 12. События Событие – самая примитивная разновидность объектов синхронизации, которая просто уведомляют
- 13. Сравнение работы события с ручным сбросом и автосбросом
- 14. Применение «событий» Объекты-события обычно используют в том случае, когда какой-то поток
- 15. Создание объекта типа «событие» HANDLE CreateEvent ( LPSECURITY_ATTRIBUTES lpEventAttributes, // атрибуты
- 16. Совместное использование объекта «события» процессами Если объект «событие» успешно создан, то
- 17. Открытие объекта типа «событие» HANDLE OpenEvent( DWORD dwDesiredAccess, // режим
- 18. Режимы доступа к «событиям» EVENT_ALL_ACCESS – полный доступ (разрешены все возможные
- 19. Управление «событиями» Перевод события в свободное состояние: BOOL SetEvent (HANDLE
- 20. Особенности PulseEvent Функция PulseEvent () устанавливает событие и тут же переводит
- 21. Пример использования «события» для синхронизации потоков
- 22. Таймеры ожидания Таймеры ожидания (waitable timers) – это объекты ядра, которые
- 23. Создание и открытие таймера ожидания HANDLE CreateWaitableTimer ( LPSECURITY_ATTRIBUTES lpMutexAttributes,
- 24. Режимы доступа к таймеру TIMER_ALL_ACCESS – полный доступ (разрешены все возможные
- 25. Управление таймером ожидания BOOL SetWaitableTimer( HANDLE hTimer, const LARGE_INTEGER
- 26. Запуск таймера ожидания Параметры pDuеТimе и lPeriod функции SetWaitableTimer () задают
- 27. Отмена действия таймера Для отмены действия таймера ожидания следует использовать функцию
- 28. Создание объекта типа «семафор» HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, //
- 29. Открытие объекта типа «семафор» HANDLE OpenSemaphore( DWORD fdwAccess, // режим
- 30. Режимы доступа к семафору SEMAPHORE_ALL_ACCESS – полный доступ (разрешены все возможные
- 31. Захват семафора Для прохождения через семафор (захвата семафора) необходимо использовать функции
- 32. Освобождение семафора Для увеличения значения счетчика семафора приложение должно использовать функцию
- 33. Функция ReleaseSemaphore BOOL ReleaseSemaphore( HANDLE hSemaphore, // дескриптор семафора LONG
- 34. Определение текущего состояния семафора Заметим, что в операционной системе Windows не
- 35. Создание и открытие мьютекса HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes, //
- 36. Режимы доступа к мьютексу MUTEX _ALL_ACCESS – полный доступ (разрешены все
- 37. Управление мьютексом Для захвата мьютекса необходимо использовать одну из Wait-функций. Для
- 38. Межпроцессное взаимодействие Критические секции в Win32 API
- 39. Критические секции В составе API ОС Windows имеются специальные и эффективные
- 40. Функции Win32 API для работы с критическими секциями Для работы с
- 41. Структура типа CRITICAL_SECTION typedef struct _RTL_CRITICAL_SECTION { PRTL_CRITICAL_SECTION_DEBUG
- 42. Основные поля структуры CRITICAL_SECTION Поле LockCount увеличивается на единицу при каждом
- 43. Вход в свободную секцию Если при попытке входа в критическую секцию,
- 44. Вход в занятую секцию При попытке входа в занятую критическую секцию,
- 45. Освобождение секции Поток-владелец при вызове LeaveCriticalSection() уменьшает поле RecursionCount на единицу
- 46. Иллюстрация использования критической секции
- 47. Критические секции в многопроцессорных системах Поле SpinCount используется только многопроцессорными системами.
- 48. Пример использования критической секции CRITICAL_SECTION cs; DWORD WINAPI SecondThread()
- 49. Использование нескольких критических секций В том случае, когда процесс работает с
- 50. Опасный код Поток 1. EnterCriticalSection(&cs1); EnterCriticalSection(&cs2); //…критический участок кода
- 51. Правила хорошего тона Критические секции должны быть короткими. Критических секций не
- 52. Реализация критических секций Функции EnterCriticalSection () и LeaveCriticalSection () реализованы на
- 53. Сравнение инструментов синхронизации Windows 2000+
- 54. Межпроцессное взаимодействие Атомарные операции и lockless программирование
- 55. Lockless программирование Lockless программирование – разработка неблокирующих многопоточных приложений. Отказ от
- 56. Атомарные операции как lockless-инструмент Простейшим способом lockless-программирования является активное использованием атомарных
- 57. Виды атомарных операций Все инструкции вида Операция Регистр-Регистр можно считать атомарными
- 58. Реализация атомарных операций в Windows 2000+ Для увеличения значения целочисленных переменных
- 59. Пример кода с использованием атомарной операции static DWORD array [100]; … for
- 60. Эффект переупорядочивания Поток 1: result = 7; flag = TRUE;
- 61. Переупорядочивание и модель памяти Чтение или запись не всегда будет происходить
- 62. «Сильная» и «слабая» модели памяти Модель памяти, в которой нет переупорядочиваний
- 63. Сводная таблица для некоторых архитектур
- 64. Барьеры памяти и оптимизации Для борьбы с переупорядочиванием применяются так называемые
- 65. Полные барьеры Полный барьер (full fence) предотвращает любые переупорядочивания операций чтения
- 66. Двухсторонние барьеры Двусторонние барьеры (Store fence и Load fence) предотвращают переупорядочивание
- 67. Односторонние барьеры Односторонние барьеры обычно реализуют одну из двух семантик –
- 68. Управление переупорядочиванием в MS VC MS VC для предотвращения переупорядочивания инструкций
- 69. Неявные барьеры в MS VC 2005 В случае MS VC 2005+
- 70. Пример решения проблемы переупорядочивания Поток 1: result = 7; // store
- 71. Производительность lockless приложений MemoryBarrier () занимает 20-90 циклов. InterlockedIncrement ()
- 72. Скачать презентацию
Слайды и текст этой презентации
Скачать презентацию на тему Межпроцессное взаимодействие. Синхронизация потоков с использованием объектов ядра Windows 2000+ можно ниже: