Содержание
- 2. Критические секции Для работы с объектами типа critical_section используются следующие функции: // инициализация критической секции VOID
- 3. #include #include using namespace std; DWORD WINAPI thread(LPVOID) { int i, j ; for (j =
- 4. int main() { int i, j ; HANDLE hThread; DWORD IDThread; hThread=CreateThread(NULL, 0, thread, NULL, 0,
- 5. #include #include using namespace std; CRITICAL_SECTION cs; DWORD WINAPI thread(LPVOID) { int i,j; for (j =
- 6. int main() { int i,j; HANDLE hThread; DWORD IDThread; // инициализируем критическую секцию InitializeCriticalSection(&cs); hThread=CreateThread(NULL, 0,
- 7. Объекты синхронизации и функции ожидания В операционных системах Windows объектами синхронизации называются объекты ядра, которые могут
- 8. К первому классу относятся объекты синхронизации, т. е. те, которые служат только для решения задач синхронизации
- 9. Функции ожидания в Windows это такие функции, параметрами которых являются объекты синхронизации. Эти функции обычно используются
- 10. Для ожидания перехода в сигнальное состояние нескольких объектов синхронизации или одного из нескольких объектов синхронизации используется
- 11. Мьютексы Для решения проблемы взаимного исключения между параллельными потоками, выполняющимися в контекстах разных процессов, в операционных
- 12. Создается мьютекс вызовом функции CreateMutex, которая имеет следующий прототип: HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes, // атрибуты защиты
- 13. #include #include HANDLE hMutex; char IpszAppName [] = "С:\\ConsoleProcess.exe"; STARTUPINFO si; PROCESS_INFORMATION pi; // создаем мьютекс
- 14. ZeroMemory(&si, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); // создаем новый консольный процесс if (!CreateProcess(IpszAppName, NULL, NULL, NULL, FALSE,
- 15. } cout « endl; // освобождаем мьютекс ReleaseMutex (hMutex) ; } // закрываем дескриптор мьютекса CloseHandle(hMutex);
- 16. #include #include int main() { HANDLE hMutex; int i , j ; // открываем мьютекс hMutex
- 17. // захватываем мьютекс WaitForSingleObject(hMutex, INFINITE); for (i = 0; i cout « j « ' '
- 18. События Событием называется оповещение о некотором выполненном действии. В программировании события используются для оповещения одного потока
- 19. Создаются события вызовом функции CreateEvent, которая имеет следующий прототип: HANDLE CreateEvent( LPSECURITY_ATTRIBUTES IpSecurityAttributes, // атрибуты защиты
- 20. Для перевода любого события в сигнальное состояние используется функция SetEvent, которая имеет следующий прототип: BOOL SetEvent(
- 21. #include #include HANDLE hOutEvent, hAddEvent; DWORD WINAPI thread (LPVOID) { for (int i = 0; i
- 22. // создаем события с автоматическим сбросом hOutEvent = CreateEvent(NULL, FALSE, FALSE, NULL); if (hOutEvent == NULL)
- 23. // выводим значение переменной cout « "A half of the work is done." « endl; cout
- 24. Доступ к существующему событию можно открыть с помощью функции CreateEvent или OpenEvent. HANDLE OpenEvent( DWORD dwDesiredAccess,
- 25. Параметр dwDesiredAccess определяет доступ к событию и может быть равен любой логической комбинации следующих флагов: ЕVENT_ALL_АСCESS
- 26. #include #include HANDLE hlnEvent; char IpEventName[ ] = "InEventName"; int main() { DWORD dwWaitResult; char szAppName[]
- 27. // запускаем процесс, который ждет ввод символа ZeroMemory(&si, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); if (!CreateProcess(szAppName, NULL, NULL,
- 28. #include #include HANDLE hlnEvent; CHAR lpEventName[]="InEventName" ; int main () { char c; hlnEvent = OpenEvent
- 29. cout « "Input any char: "; cin » c; // устанавливаем событие о вводе символа SetEvent(hlnEvent);
- 30. Семафоры Семафоры в операционных системах Windows описываются объектами ядра semaphores. Семафор находится в сигнальном состоянии, если
- 31. BOOL ReleaseSemaphore ( HANDLE hSemaphore, // дескриптор семафора LONG IReleaseCount, // положительное число, на которое увеличивается
- 32. HANDLE OpenSemaphore( DWORD dwDesiredAccess, // флаги доступа BOOL blnheritHandle, // режим наследования LPCTSTR lpName // имя
- 33. #include #include volatile int a[10]; HANDLE hSemaphore; DWORD WINAPI thread(LPVOID) { for (int i = 0;
- 34. int main() { int i; HANDLE hThread; DWORD IDThread; cout « "An initial state of the
- 36. Скачать презентацию