- Process Explorer v16.32
- Introduction
- Related Links
- Download
- Installation
- Note on use of symbols
- Learn More
- Управление процессами Windows через CMD
- Управление приложениями, процессами и производительностью
- Примеры управления процессами через командную строку
- Анализ выполняемых процессов в командной строке
- Мониторинг процессов и использования системных ресурсов
- Останов процессов в командной строке
- Системные и пользовательские процессы
- Обзор Process Lasso. Продвинутое управление процессами Windows
- Как использовать Process Lasso
- Оптимизация приоритета процесса
- Технология ProBalance
- Главное окно программы
- Активные процессы
- Графическое представление
- Вкладка «View»
- Параметры
- Управление процессами в Windows
Process Explorer v16.32
By Mark Russinovich
Published: April 28, 2020
Download Process Explorer (2.5 MB)
Run now from Sysinternals Live.
Introduction
Ever wondered which program has a particular file or directory open? Now you can find out. Process Explorer shows you information about which handles and DLLs processes have opened or loaded.
The Process Explorer display consists of two sub-windows. The top window always shows a list of the currently active processes, including the names of their owning accounts, whereas the information displayed in the bottom window depends on the mode that Process Explorer is in: if it is in handle mode you’ll see the handles that the process selected in the top window has opened; if Process Explorer is in DLL mode you’ll see the DLLs and memory-mapped files that the process has loaded. Process Explorer also has a powerful search capability that will quickly show you which processes have particular handles opened or DLLs loaded.
The unique capabilities of Process Explorer make it useful for tracking down DLL-version problems or handle leaks, and provide insight into the way Windows and applications work.
Related Links
- Windows Internals Book The official updates and errata page for the definitive book on Windows internals, by Mark Russinovich and David Solomon.
- Windows Sysinternals Administrator’s Reference The official guide to the Sysinternals utilities by Mark Russinovich and Aaron Margosis, including descriptions of all the tools, their features, how to use them for troubleshooting, and example real-world cases of their use.
Download
Download Process Explorer (2.5 MB)
Run now from Sysinternals Live.
Runs on:
- Client: Windows Vista and higher (Including IA64).
- Server: Windows Server 2008 and higher (Including IA64).
Installation
Simply run Process Explorer (procexp.exe).
The help file describes Process Explorer operation and usage. If you have problems or questions please visit the Process Explorer forum on Technet.
Note on use of symbols
When you configure the path to DBGHELP.DLL and the symbol path uses the symbol server, the location of DBGHELP.DLL also has to contain the SYMSRV.DLL supporting the server paths used. See SymSrv documentation or more information on how to use symbol servers.
Learn More
Here are some other handle and DLL viewing tools and information available at Sysinternals:
- The case of the Unexplained. In this video, Mark describes how he has solved seemingly unsolvable system and application problems on Windows.
- Handle — a command-line handle viewer
- ListDLLs — a command-line DLL viewer
- PsList — local/remote command-line process lister
- PsKill — local/remote command-line process killer
- Defrag Tools: #2 — Process Explorer In this episode of Defrag Tools, Andrew Richards and Larry Larsen show how to use Process Explorer to view the details of processes, both at a point in time and historically.
- Windows Sysinternals Primer: Process Explorer, Process Monitor and More Process Explorer gets a lot of attention in the first Sysinternals Primer delivered by Aaron Margosis and Tim Reckmeyer at TechEd 2010.
—>
Управление процессами Windows через CMD
Основой работы каждого системного администратора является мониторинг операционных систем и обеспечение нормальной работы всех процессов — по крайней мере такой, насколько можно ожидать. Внимательное наблюдение за журналами событий помогает выявлять и отслеживать проблемы в приложениях, безопасности и важных службах. Обнаружив или предполагая проблему, админ должен докопаться до ее причины и устранить. Точное определение причины проблемы предотвратит ее повторное появление.
Управление приложениями, процессами и производительностью
Всякий раз, когда операционная система или пользователь запускает службу, приложение или команду, Microsoft Windows запускает один или более процессов для управления соответствующей программой. Несколько утилит командной строки упростят вам мониторинг программ и управление ими. К этим утилитам относятся:
- Pmon (Process Resource Manager) — показывает статистические данные по производительности, включая использование памяти и процессора, а также список всех процессов, выполняемых в локальной системе. Позволяет получать детальные «снимки» задействованных ресурсов и выполняемых процессов. Pmon поставляется с Windows Resource Kit;
- Tasklist (Task List) — перечисляет все выполняемые процессы по имени и идентификатору процесса, сообщает информацию о сеансе пользователя и занимаемой памяти;
- Taskkill (Task Kill) — останавливает выполнение процесса, заданного по имени или идентификатору. С помощью фильтров можно останавливать процессы в зависимости от их состояния, номера сеанса, процессорного времени, занимаемой памяти, имени пользователя и других параметров.
Примеры управления процессами через командную строку
Анализ выполняемых процессов в командной строке
При помощи утилиты командной строки Tasklist можно проверить процессы, работающие в локальной или удаленной системе. Tasklist позволяет:
- получить идентификатор процесса, его состояние и другие важные сведения о процессах в системе;
- увидеть зависимости между выполняемыми процессами и службами, настроенными в системе;
- просмотреть список DLL, задействованных выполняемыми в системе процессами;
- использовать фильтры для включения или исключения процессов, показываемых Tasklist.
Пример: tasklist — команда выводит список запущенных в операционной системе процессов.
Мониторинг процессов и использования системных ресурсов
Process Resource Monitor (Pmon) показывает «моментальный снимок» используемых системных ресурсов и выполняемых процессов. После запуска (вводом pmon в командной строке) эта утилита собирает информацию об использовании ресурсов и выполняемых процессах в локальной системе и выводит результаты в консольное окно. Статистика автоматически обновляется каждые пять секунд. Pmon продолжает работу, пока вы не нажмете клавишу Q для выхода; нажатие любой другой клавиши приводит к обновлению информации.
Останов процессов в командной строке
Чтобы остановить процессы в локальной или удаленной системе, применяйте утилиту командной строки Taskkill. Процесс можно остановить по его идентификатору при помощи параметра /Pid или по имени образа
Пример: taskkill /IM notepad.exe — завершает работу программы блокнот.
Системные и пользовательские процессы
Обычно процесс, запускаемый операционной системой, называется системным, а процесс, запускаемый пользователем, — пользовательским. Большинство пользовательских процессов выполняется в интерактивном режиме. То есть пользователь запускает процесс непосредственно при помощи клавиатуры или мыши. Если программа активна, связанный с ней интерактивный процесс контролирует клавиатуру и мышь до тех нор, пока вы не переключите управление, завершив эту программу или выбрав другую. Процесс, получивший контроль над клавиатурой и мышью, называют активным.
Процессы могут работать и в фоновом режиме независимо от сеансов зарегистрированных пользователей. Фоновые процессы не имеют контроля над клавиатурой, мышью или другими устройствами ввода и обычно запускаются операционной системой. Но с помощью Task Scheduler (Планировщик заданий) пользователи тоже могут запускать процессы в фоновом режиме, и эти процессы способны работать независимо от того, зарегистрирован ли пользователь в системе.
Обзор Process Lasso. Продвинутое управление процессами Windows
Сегодня в интернете можно найти несколько программ, предназначенных для оптимизации работы процессора в режиме реального времени. О них уже неоднократно рассказывалось, однако это не является поводом не поговорить об ещё одной утилите.
Как использовать Process Lasso
Process Lasso является одним из лучших инструментов для мониторинга и управления процессами в ОС Windows. Эта многофункциональная программа во многих отношениях намного лучше, чем стандартный диспетчер задач, который имеется в Windows 10.
Если ты новичок, то можешь установить Process Lasso и предоставить ему возможность делать свою работу в автоматическом режиме. Однако если ты относишься к тому типу людей, которые хотят контролировать всё сами, дочитай этот обзор до конца, чтобы узнать больше об этой программе.
Оптимизация приоритета процесса
Если и есть что-то, что мне нравится в Process Lasso, так это его «оптимизация приоритета процесса» и «автоматизация системы». Эти функции дают пользователю полный контроль над ситуацией.
Оптимизация приоритета позволяет просмотреть и изменить приоритет каждого процесса, но, что самое главное, она обеспечивает бесперебойную работу компьютера.
Технология ProBalance
Чтобы Process Lasso работал эффективно, он должен в полной мере использовать технологию ProBalance (Process Balance), позволяющую системе установить гармоничные отношения с пользователями. Проще говоря, ProBalance превращает Process Lasso в менее пугающий Диспетчер задач, и это хорошо как для новичков, так и для продвинутых юзеров.
Чтобы получить данные о том, как работает ProBalance, нажмите кнопку «View», а затем перейдите к «Open ProBalance Insights».
Главное окно программы
Первое, что вы увидите при запуске программы, — это главное окно. Именно здесь находится большая часть информации, и именно сюда вы будете смотреть особенно часто. Здесь вы найдёте «Все процессы», «Активные процессы», «Использование процессора», «Скорость отклика» и «Загрузку памяти».
Поначалу всё это очень трудно воспринять, но со временем, при регулярном использовании программы, всё станет намного проще и понятнее.
Если вы войдёте во вкладку «Main», вы поймёте, что есть довольно много вещей на главном экране, которые вы можете активировать или деактивировать. Многие пользователи предпочитают, чтобы в рабочем окне не было беспорядка, но вы можете добавить сюда всё, что вам нужно.
Здесь же вы можете внести изменения в схему электропитания вашего компьютера. Любые изменения питания будут сделаны из ядра, и если приложение будет удалено, изменения всё равно сохранятся.
Активные процессы
В разделе «Активные процессы» можно увидеть все запущенные процессы и приложения. Если щёлкнуть правой кнопкой мыши на процесс, у вас будет возможность внести несколько изменений. Например, вы можете завершить программу, перезапустить её, активировать режим производительности и многое другое. Кроме того, есть возможность осуществить привязку к процессору (CPU Affinity) и изменить приоритет ввода-вывода (I/O priority) для каждой программы, если вы захотите сделать это.
Графическое представление
Пользователи могут наглядно увидеть, что происходит с их компьютером, просто посмотрев на график загрузки процессора и использования оперативной памяти. Кроме того, этот график демонстрирует, насколько быстро реагирует вся система.
Вкладка «View»
В верхней части окна программы вы увидите вкладку «View». По сути она выполняет ту же функцию, что и вкладка «Main». Из этой вкладки вы можете удалить график (и снова добавить его в любое время) или же отключить компоненты графика, если вам кажется, что отображается слишком много информации.
Вы не слишком довольны цветом, используемым в Process Lasso по умолчанию? Вкладка «View» даёт вам возможность выбрать цветовую палитру в соответствии с собственными предпочтениями.
Параметры
Что же мы можем сделать в разделе «Options»? Довольно много, если вдуматься. Например, в этом разделе приложения пользователь может настроить работу процессора и оперативной памяти. Для тех, кто чувствует необходимость настроить свой ввод-вывод и определить, как программа будет запускаться при загрузке, раздел «Параметры» тоже очень пригодится.
Управление процессами в Windows
В отличие от «полуторазадачной» MS-DOS, которая оставляет прикладному программисту всю работу (и весь риск) организации параллельного функционирования процессов, многозадачные ОС предоставляют программисту более или менее удобный и богатый набор системных функций, позволяющих запустить несколько параллельных процессов и организовать их взаимодействие (синхронизацию процессов, обмен данными, взаимное исключение и т.п.). При этом ОС обязана гарантировать корректную и эффективную организацию переключения процессов, разделения между ними процессорного времени, памяти и других ресурсов.
Сложность проблемы организации взаимодействия параллельных процессов существенно разная для систем, использующих вытесняющую и невытесняющую диспетчеризацию процессов. При вытесняющей диспетчеризации процесс может быть прерван диспетчером практически в любой момент. Помимо задачи сохранения и последующего восстановления контекста процесса (см. п. 4.2.5), которая должна решаться самой ОС, возникают еще и задачи обеспечения взаимного исключения при выполнении критических секций в многозадачных приложениях. Только разработчик программы может решить, какие части текста его программы являются критическими секциями и должны быть защищены семафорами.
В системе с невытесняющей диспетчеризацией программисту достаточно проверить, что критические секции не содержат вызовов блокирующих и вытесняющих функций. При этом можно гарантировать, что в ходе выполнения критической секции не произойдет переключения процессов.
Все версии Windows от 1.0 до 3.11 представляли собой достаточно мощные многозадачные системы с невытесняющей диспетчеризацией. Версии, начиная с Windows NT и Windows 95, используют вытесняющую диспетчеризацию.
Понятие объекта в Windows
В ОС Windows широко используется понятие системного объекта. По сути, любой объект представляет собой некоторую структуру данных, расположенную в адресном пространстве системы. Поскольку приложения не могут иметь доступа к этой памяти, то для работы с объектом приложение должно получить хэндл объекта – некоторое условное число, которое будет представлять данный объект при обращении к API-функциям. Процесс получает хэндл, как правило, при вызове функции CreateXxx (здесь Xxx – название объекта), которая может либо создать новый объект, либо открыть существующий объект, созданный другим процессом. Функции вида OpenXxx позволяют только открыть существующий объект.
Объекты Windows делятся на объекты ядра (KERNEL), позволяющие управлять процессами, объекты USER, описывающие работу с окнами, и объекты GDI, задающие графические ресурсы Windows. В данном курсе рассматриваются только объекты ядра. Процессы, нити и открытые файлы являются примерами объектов ядра.
Одной из отличительных особенностей объектов ядра являются атрибуты защиты, которые можно указать при создании объекта. Эти атрибуты определяют права доступа к объекту для различных пользователей и групп. Кроме того, при создании объекта ядра можно задать его имя, которое используется для того, чтобы другие процессы могли открыть тот же объект, зная его имя.
Хэндл объекта может быть использован только тем процессом, который создал или открыл этот объект. Нельзя просто переслать значение хэндла другому процессу, оно не будет действовать в другом контексте. Имеется, однако, функция DuplicateHandle, которая создает корректную копию хэндла, требуя указать для этого, какой процесс создает копию, какого именно хэндла и для какого процесса предназначена копия.
Если хэндл объекта больше не нужен данному процессу, его следует закрыть с помощью функции CloseHandle, общей для разных типов объектов.
Объект существует до тех пор, пока не будут закрыты все хэндлы, указывающие на него.
Процессы и нити
Общее понятие процесса, рассмотренное выше в п. 4.2.1, для ОС Windows как бы распадается на два понятия: собственно процесса и нити (thread; в некоторых книгах используется термин поток). При этом нить является единицей работы, она участвует в конкуренции за процессорное время, изменяет свое состояние и приоритет, как было описано выше для процесса. Что же касается процесса в Windows, то он может состоять из нескольких нитей, использующих общую память, открытые файлы и другие ресурсы, принадлежащие процессу. В двух словах: процесс – владеет (памятью, файлами), нити – работают, при этом совместно используя ресурсы своего процесса. Правда, нить тоже кое-чем владеет: окнами, очередью сообщений, стеком.
Процесс создается при запуске программы (EXE-файла). Одновременно создается одна нить процесса (должен же кто-то работать!). Создание процесса выполняется с помощью API-функции CreateProcess. Основными параметрами при вызове этой функции являются следующие.
· Имя файла запускаемой программы.
· Командная строка, передаваемая процессу при запуске.
· Атрибуты защиты для создаваемых процесса и нити. И процесс, и нить являются объектами ядра Windows и в этом качестве могут быть защищены от несанкционированного доступа (например, от попыток других процессов вмешаться в работу данного процесса).
· Различные флаги, уточняющие режим создания процесса. Среди них следует отметить класс приоритета процесса, флаг отладочного режима (при этом система будет уведомлять процесс-родитель о действиях порожденного процесса), а также флаг создания приостановленного процесса, который не начнет работать, пока не будет вызвана функция возобновления работы.
· Блок среды процесса.
· Текущий каталог процесса.
· Параметры первого окна, которое будет открыто при запуске процесса.
· Адрес блока информации, через который функция возвращает родительскому процессу четыре числа: идентификатор созданного процесса, идентификатор нити, хэндл процесса и хэндл нити.
Если процесс успешно создан, функция CreateProcess возвращает ненулевое значение.
Класс приоритета процесса используется при определении приоритетов его нитей. Подробнее об этом в п. 4.5.3.
Хэндл объекта ядра Windows (в данном случае процесса или нити) позволяет выполнять различные операции с этим объектом. Подробнее о хэндлах и идентификаторах см. п. 4.5.4.
После создания процесса его единственная нить начинает выполнять программу процесса, работая параллельно с нитями других запущенных процессов. Если логика работы программы предполагает параллельное выполнение каких-либо действий в рамках одного процесса, то могут быть созданы дополнительные нити. Для этого используется функция CreateThread. Ее основные параметры следующие:
· атрибуты защиты для создаваемой нити;
· размер стека нити;
· стартовый адрес нити (обычно нить связывается с выполнением одной из функций, описанных в программе процесса, при этом в качестве стартового адреса указывается имя функции);
· параметр-указатель, позволяющий передать нити при запуске некоторое значение в качестве аргумента;
· флаг создания нити в приостановленном состоянии;
· указатель на переменную, в которой функция должна возвратить идентификатор созданной нити.
Возвращаемым значением функции CreateThread является хэндл созданной нити либо NULL, если создать нить не удалось.
Прекрасным примером многонитевой программы является Microsoft Word. В то время как основная нить обрабатывает ввод с клавиатуры, отдельная нить может динамически рассчитывать разбиение текста на страницы, еще одна нить может в это же время выполнять печать документа или его сохранение.
Для завершения работы нити используется вызов функции ExitThread. Для завершения работы всего процесса любая из его нитей может вызвать функцию ExitProcess. Единственным параметром каждой из этих функций является код завершения нити или процесса.
Завершение процесса приводит к освобождению всех ресурсов, которыми владел процесс: памяти, открытых файлов и т.п.
При завершении процесса завершаются все его нити. И наоборот, при завершении последней нити процесса завершается и сам процесс.
Не слишком широко известно, что нить не является самой мелкой единицей организации вычислений. На самом деле Windows позволяет создать внутри нити несколько волокон (fiber), которые в обычной терминологии могут быть описаны как сопрограммы или как задачи с невытесняющей диспетчеризацией, работающие в рамках одной и той же задачи с вытесняющей диспетчеризацией. Переключение волокон выполняется только явно, с помощью функции SwitchToFiber. Об использовании сопрограмм см. /15/.
Планировщик Windows
Задачей планировщика является выбор очередной нити для выполнения. Планировщик вызывается в трех случаях:
· если истекает квант времени, выделенный текущей нити;
· если текущая нить вызвала блокирующую функцию (например, WaitForMultipleObjects или ReadFile) и перешла в состояние ожидания;
· если нить с более высоким приоритетом пробудилась от ожидания или была только что запущена.
Для выбора нити используется алгоритм приоритетной очереди. Для каждого уровня приоритета система ведет очередь активных нитей (т.е. нитей, находящихся в состоянии готовности). Для выполнения выбирается очередная нить из непустой очереди с самым высоким приоритетом.
Очереди активных нитей пополняются за счет нитей, проснувшихся после состояния ожидания и нитей, вытесненных планировщиком. Как правило, нить помещается в конец очереди. Исключение делается для нити, вытесненной до истечения ее кванта времени более приоритетной нитью. Такая «обиженная» нить ставится в голову очереди.
Значение кванта времени для серверных установок Windows равно обычно 120 мс, для рабочих станций – 20 мс.
Как вы думаете, почему для серверов квант времени больше?
Теперь подробнее о приоритетах. Хотя общая схема их назначения одинакова для всех версий Windows, детали могут разниться. Дальнейшее изложение ориентировано на Windows NT 4.0.
Все уровни приоритета нитей пронумерованы от 0 (самый низкий приоритет) до 31 (самый высокий). Уровни от 16 до 31 называются приоритетами реального времени, они предназначены для выполнения критичных по времени системных операций. Только сама система или пользователь с правами администратора могут использовать приоритеты из этой группы. Уровни от 0 до 15 называются динамическими приоритетами.
В Windows используется двухступенчатая схема назначения приоритетов. При создании процесса ему назначается (а впоследствии может быть изменен самой программой или пользователем) один из четырех классов приоритета, с каждым из которых связано базовое значение приоритета:
· Realtime (базовый приоритет 24) – высший класс приоритета, допустимый только для системных процессов, занимающих процессор на очень короткое время;
· High (базовый приоритет 13) – класс высокоприоритетных процессов;
· Normal (базовый приоритет 8) – обычный класс приоритета, к которому относится большая часть запускаемых прикладных процессов;
· Idle (базовый приоритет 4) – низший (буквально – «холостой» или «простаивающий») класс приоритета, характерный для экранных заставок, мониторов производительности и других программ, которые не должны мешать жить более важным программам.
Собственно приоритет связывается не с процессом, а с каждой его нитью. Приоритет нити определяется базовым приоритетом процесса, к которому прибавляется относительный приоритет нити – величина от –2 до +2. Относительный приоритет назначается нити при ее создании и может при необходимости изменяться. Имеется также возможность назначить нити критический приоритет (31 для процессов реального времени, 15 для остальных) или холостой приоритет (16 для процессов реального времени, 0 для остальных).
Для нитей процессов реального времени приоритеты являются статическими в том смысле, что система не пытается их изменять по своему усмотрению. Предполагается, что для этой группы процессов соотношение приоритетов должно быть именно таким, как задумал программист.
Для процессов трех низших классов их приоритеты не случайно называются динамическими. Планировщик может изменять приоритеты, а заодно и кванты времени для нитей в ходе их выполнения, чтобы достичь более справедливого распределения процессорного времени. Правила изменения динамических приоритетов следующие.
· Когда заблокированная нить дождалась нужного ей события, к приоритету нити прибавляется величина, зависящая от причины ожидания. Эта прибавка может достигать 6 единиц (но приоритет не должен превысить 15), если нить разблокирована вследствие нажатия клавиши или кнопки мыши. Таким способом система стремится уменьшить время реакции на действия пользователя. Всякий раз, когда нить полностью использует свой квант времени, прибавка уменьшается на 1, пока приоритет нити не вернется к своему заданному значению.
· Если нить владеет окном переднего плана (т.е. тем, с которым работает пользователь), то ради уменьшения времени реакции планировщик может увеличить квант времени для этой нити с 20 мс до 40 или 60 мс, в зависимости от настроек системы.
· Если планировщик обнаруживает, что некоторая нить пребывает в очереди более 3 с, то он повышает ее приоритет аж до 15 и удваивает ее квант. Но эта благотворительность разовая: когда Золушка-нить израсходует увеличенный квант или заблокируется, ее приоритет и квант возвращаются к прежним значениям. Смысл акции понятен: система пытается обеспечить хоть какое-то продвижение даже для низкоприоритетных нитей.
Процесс и нить как объекты
Подсистема управления процессами в Windows позволяет рассматривать процессы и нити как объекты, над которыми нити различных процессов могут выполнить целый ряд действий. Для этого требуется иметь хэндл процесса или нити. Как нам известно, такие хэндлы возвращаются как побочные результаты работы функций CreateProcess и CreateThread. Это позволяет процессу, запустившему другой процесс или нить, выполнять с ними необходимые действия. Однако в некоторых случаях желательно дать возможность управлять процессом не процессу-«родителю», а другому, совершенно постороннему процессу (например, программе администрирования системы). Проблема при этом в том, что, как уже отмечалось, хэндл в Windows имеет смысл только в пределах того процесса, который вызвал функцию Create и не может быть просто передан другому процессу.
Функция OpenProcess позволяет одному процессу получить хэндл любого другого процесса, указав для этого два параметра: идентификатор интересующего процесса и маску, задающую набор запрашиваемых прав по отношению к этому процессу. Если подсистема безопасности Windows, сверив маркер доступа запрашивающего процесса с дескриптором безопасности процесса-объекта (см. п. 3.8.4.1), сочтет запрос законным, то функция вернет требуемый хэндл.
А о каких, собственно, правах идет речь? Что именно один процесс может сделать с другим процессом? Основные права следующие:
· запускать новую нить процесса;
· запрашивать и изменять класс приоритета процесса;
· читать и записывать данные в памяти процесса;
· использовать процесс в качестве объекта синхронизации;
· принудительно прекращать выполнение процесса;
· запрашивать код завершения процесса.
Все перечисленные действия выполняются с помощью соответствующих API-функций (например, для прекращения процесса вызывается функция TerminateProcess), одним из параметров которых указывается хэндл открытого процесса-объекта.
Синхронизация нитей
Способы синхронизации
Windows предоставляет разнообразные возможности для синхронизации работы нитей, т.е., иначе говоря, для организации пассивного ожидания нитью некоторых событий, связанных с работой других нитей того же процесса или других процессов.
· Традиционной для Windows формой синхронизации является обмен сообщениями (messages). При этом, механизм сообщений предназначен не только для синхронизации, но и для обмена данными. Далее работа с сообщениями будет рассмотрена подробно.
· Разнообразные условия ожидания могут быть реализованы с помощью объектов синхронизации и функций ожидания, которые позволяют заблокировать нить до момента перехода указанного объекта в сигнальное состояние.
· Использование переменных типа CRITICAL_SECTION, в отличие от предыдущих способов, возможно только для синхронизации нитей одного и того же процесса, но зато реализуется более эффективно по времени и памяти.