Архитектура современных операционных систем
123 Для синхронизации потоков внутри одного процесса Windows поддержи- вает критические секции (рис. 4.13.). С каждой критической секцией связывает- ся специальная структура данных, которая содержит информацию о состоянии критической секции: поток, вошедший в критическую секцию, количество его входов и выходов из критической секции. Для создания и инициализации критической секции, используется функция InitializeCriticalSection, а для уничтожения критической секции DeleteCriti- calSection. EnterCriticalSection … {Работа с ПИР} … LeaveCriticalSection Рис. 4.13. Поток, выполнивший функцию EnterCriticalSection (рис. 4.13), считается вошедшим в критическую секцию. Пока поток не выполнит функцию LeaveCriticalSection, никакой другой поток не сможет выполнить вход в эту критическую секцию. WindowsNT допускает рекурсивное использование критической секции, то есть поток, вошедший в критическую секцию, может еще раз войти в нее. При этом он не будет заблокирован, но и выйти он должен столько же раз, сколько вошел. Windows допускает наличие нескольких критических секций внутри одно- го процесса, однако для избегания клинча (взаимоблокировки), эти критические секции не должны использоваться одновременно, либо потоки должны входить в эти критические секции строго в определенном порядке.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTY0OTYy