- •1. Библиотеки. Статическая библиотека. Создание.
- •2. Библиотеки. Статическая библиотека. Использование.
- •3. Библиотека. Динамическая библиотека. Создание.
- •4. Библиотека. Динамическая библиотека. Статическая загрузка.
- •5. Библиотека. Динамическая библиотека. Динамическая загрузка.
- •7. Библиотеки. Динамическая библиотека. Сравнение способов загрузки.
- •8.Использование файлов при создании программы.
- •9. Позиционирование при работе с файлами. Функция.
- •10. Отображение файла на памяти. Назвать назначения параметров в функции.
- •11. Управление памятью. Для чего используется.
- •12.Блокирование памяти. В каком случае используется. Функции для блокирования.
- •13.Управление памятью. Для чего используют функции:
- •14. Для чего создаются процессы. Функции.
- •15. Назначение функций:
- •16. Асинхронный ввод/вывод:
- •17. Для чего используются потоки. Функции
- •18. Приоритеты процессов и потоков. Функции:
- •19. Синхронизация потоков. Interlocked функции. Назначение функций:
- •20. Синхронизация потоков. Критические секции. Функции.
- •21. Использование Event для синхронизации. Функции:
- •22. Использование Semaphore для синхронизации. Функции:
- •23. Использование WaitableTimerдля синхронизации. Функции:
- •24) Управление процессом. Планирование и диспетчеризация.
- •25) Использование Mutex для синхронизации. Функции.
- •26) Сравнение сегментной и страничной адресации
- •27) Страничная организация памяти.
- •29) Локальная память компьютеров. Функции
- •30. Соглашения по вызову, объяснить следующие с, срр, fastcall, stdcall. Дайте рекомендации по использованию соглашения.
21. Использование Event для синхронизации. Функции:
Смысл использования события в уведомлении одного или нескольких ожидающих потоков. События бывают двух типов: Сброс вручную, Сбрасываются ожидаемыми функциями.
Разница в том, что первый вид события нужно применять если событие ждут несколько потоков. Только сброс в ручную поволяет это сделать. Иначе первый же обработчик сбросит событие и другие потоки об этом не узнают. Реализуется это так. Объявляется переменная события типа HANDLE. Для создания события используется функция CreateEvent(), для доступа OpenEvent(), для установки события две функции SetEvent() и PulseEvent(). Для сброса события используется функция ResetEvent(). Дескриптор события после окончания работы нужно закрыть. Объект событие может находиться в двух состояниях - занят и свободен.
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES
lpEventAttributes, //игнорируеться, должно быть null
BOOL bManualReset, //true – сброс в ручную, false - автоматически
BOOL InitialState, //начальное состояние объекта
LPTSTR lpName //имя объекта события
);
BOOL WINAPI SetEvent(
HANDLE hEvent //Дескриптор события объекта
);
BOOL WINAPI ResetEvent(
HANDLE hEvent //Дескриптор события объекта
);
DWORD WINAPI WaitForSingleObject(
HANDLE hHandle, //Дескриптор объекта
DWORD dwMilliseconds //Таймаут в миллисекундах
);
BOOL WINAPI CloseHandle(
HANDLE hObject //Дескриптор открытого объекта
);
22. Использование Semaphore для синхронизации. Функции:
Данный объект синхронизации позволяет ограничить доступ потоков к объекту синхронизации на основании их количества. Например, мы хотим, чтобы к какому-нибудь объекту могли обратиться максимум 3 потока. Не больше. Тогда нам нужен семафор. Сначала семафор инициализируется и ему передается количество потоков, которые к нему могут обратиться. Дальше при каждом обращении к ресурсу его счетчик уменьшается. Когда счетчик уменьшиться до 0 к ресурсу обратиться больше нельзя. При отсоединении потока от семафора его счетчик увеличивается, что позволяет другим потокам обратиться к нему. Сигнальному состоянию соответствует значение счетчика больше нуля. Когда счетчик равен нулю, семафор считается не установленным (сброшенным).
Сначала нам нужно создать семафор, а для этого есть функция CreateSemaphore(). Эта функция создает семафор с заданным начальным значением счетчика и максимальным значением. Это значение ограничивает доступ. Функция OpenSemaphore() осуществляет доступ к семафору. Функция ReleaseSemaphore() увеличивает значение счетчика. Счетчик может меняться от 0 до максимального значения. После завершения работы достаточно вызвать CloseHandle().
HANDLE WINAPI CreateSemaphore(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, //указатель на структуру
LONG lInitialCount, //первоначальное количество потоков в семафоре
LONG lMaximumCount, //максимальное количство потоков в семафоре
LPCTSTR lpName //Имя семафора объекта
);
BOOL WINAPI ReleaseSemaphore(
HANDLE hSemaphore, //Дескриптор семафора
LONG lReleaseCount, //Количество на которое будет увеличено количество потоков в семафоре
LPLONG lpPreviousCount //Предедущее значение семафора
);
DWORD WINAPI WaitForSingleObject(
HANDLE hHandle, //Дескриптор объекта
DWORD dwMilliseconds //Таймаут в миллисекундах
);
BOOL WINAPI CloseHandle(
HANDLE hObject //Дескриптор открытого объекта
);