Операционные системы. Программирование в операционной среде Windows

22 организовать взаимодействие потоков в общем адресном пространстве. Поэтому лучше использовать дополнительные потоки, чем создавать новые процессы. Процессы потомки целесообразно создавать для выполнения каких-либо операций, когда необходимо дождаться их результатов. ОС в вытесняющем режиме переключает управление между потоками также как между процессами. Многопоточные приложения позволяют более эффективно использовать ресурсы вычислительной системы, особенно центральный процессор. Возможность создания потока с более низким приоритетом позволяет пользоваться программой в фоновом режиме, например для индексации данных, дефрагментации диска и т.п. В фоновом режиме электронные таблицы пересчитывают данные, текстовые процессоры разбивают текст на страницы, проверяют его на орфографические и грамматические ошибки, можно копировать файлы на другие носители, Web-браузеры способны взаимодействовать с серверами в фоновом режиме. 2.2. Функция потока. Создание потока Каждый поток начинает выполнение с входной функции. В первичном потоке такой функцией является main, wmain, WinMain или wWinMain. При создании вторичного потока, в нем тоже должна быть входная функция, которая может иметь произвольное имя и имеет один параметр, смысл которого определяется разработчиком: DWORD WINAPI ThreadFunc(PVOID pvParam) { DWORD dwResult = 0; return(dwResult); } Для создания потоков в Windows предусмотрена функция CreateThread. Действия операционной системы после вызова функции CreateThread следующие: - создает ОЯ «поток» с начальным значением счетчика пользователей, равным 1. - выделяет память под стек потока из адресного пространства процесса. ОЯ «поток» - это структура данных, которая используется ОС для управления потоком и хранит статистическую информацию о потоке. Новый поток выполняется в контексте того же процесса, что и родительский поток. Поэтому он получает доступ ко всем описателям ОЯ, всей памяти и стекам всех потоков в процессе. За счет этого потоки в рамках одного процесса могут легко взаимодействовать друг с другом. HANDLE CreateThread( PSECURITY_ATTRIBUTES psa, // атрибуты защиты DWORD cbStack, // размер стека потока PTHREAD_START_ROUTINE pfnStartAddr, // адрес функции потока

RkJQdWJsaXNoZXIy MTY0OTYy