Центр справки и настройки Windows XP 3.8


Процессы в Windows - часть 7


По возвращаемому значению можно понять, какое из двух событий произошло. Ожидать с помощью wait-функций можно большинство объектов ядра, например, объект "процесс" или "поток", чтобы определить, когда они завершат свою работу.

Функции WaitForMultipleObjects передается сразу массив объектов. Можно ожидать срабатывания сразу всех объектов или какого-то одного из них.

Пример 2. Программа создает два одинаковых потока и ожидает их завершения.

Потоки просто выводят текстовое сообщение, которое передано им при инициализации.

#include <windows.h> #include <process.h>

unsigned __stdcall ThreadFunc( void * arg) // Функция потока

{ char ** str = (char**)arg; MessageBox(0,str[0],str[1],0); _endthreadex( 0 ); return 0; }; int main(int argc, char* argv[]) { char * InitStr1[2] = {"First thread running!","11111"};// строка для первого потока

char * InitStr2[2] = {"Second thread running!","22222"};// строка для второго потока

unsigned uThreadIDs[2];

HANDLE hThreads[2]; hThreads[0] = (HANDLE)_beginthreadex( NULL, 0, &ThreadFunc, InitStr1, 0,&uThreadIDs[0]); hThreads[1] = (HANDLE)_beginthreadex( NULL, 0, &ThreadFunc, InitStr2, 0,&uThreadIDs[1]);

// Ждем, пока потоки не завершат свою работу

WaitForMultipleObjects(2, hThreads, TRUE, INFINITE ); // Set no time-out

// Закрываем дескрипторы

CloseHandle( hThreads[0] ); CloseHandle( hThreads[1] ); return 0; }

Синхронизация потоков

Работая параллельно, потоки совместно используют адресное пространство процесса. Также все они имеют доступ к описателям (handles) открытых в процессе объектов. А что делать, если несколько потоков одновременно обращаются к одному ресурсу или необходимо как-то упорядочить работу потоков? Для этого используют объекты синхронизации и соответствующие механизмы.

Мьютексы.

Мьютексы (Mutex) это объекты ядра, которые создаются функцией CreateMutex(). Мьютекс бывает в двух состояниях - занятом и свободном. Мьютексом хорошо защищать единичный ресурс от одновременного обращения к нему разными потоками.




Начало  Назад  Вперед



Книжный магазин