Для
создания дополнительного потока необходимо вызывать функцию CreateThread, в качестве аргументов этой функции
передаются приоритет запускаемого потока, функция, которую он будет исполнять, и
ее аргументы. Ниже представлен пример создания дополнительного потока:
#include <windows.h>
#include <process.h>
#include <stdio.h>
DWORD WINAPI ThreadProc( LPVOID lpParam )
{
printf(“\nNew created thread”);
return 0;
}
void main()
{
PMYDATA pData;
DWORD dwThreadId;
HANDLE hThread;
hThread = CreateThread(
NULL, // использовать атрибуты безопасности по умолчанию
0, // использовать размер стека для потока по умолчанию
ThreadProc, // адрес функции, исполняемой в дочернем потоке
pData, // аргументы функции
0, // использовать флаги создания потока по умолчанию
&dwThreadId); // возвращаемый параметр – идентификатор потока
// проверка на успешность процедуры создания дочернего потока
if (hThread == NULL)
{
ExitProcess(1);
}
CloseHandle(hThread);
}
Для создания нескольких дочерних потоков необходимо несколько раз вызвать метод CreateThread
При разработке параллельных приложений на основе явного использования потоков операционной системы Windows важным аспектом является организация согласованного доступа к ресурсам, которые используются несколькими потоками, будь это общие переменные или участки памяти. Такие ресурсы называются общими или разделяемыми. При наличии нескольких потоков необходимо осуществлять синхронизацию их работы – это можно сделать с помощью таких механизмов операционной системы как критические секции, мьютексы, семафоры, события и другие.
Важные положительные моменты технологии Windows threads:
- Разработка параллельных приложений на основе данной технологии позволяет явно управлять созданием и завершением потоков. Таким образом, обеспечивается контроль за началом и окончанием работы потоков.
- Явное задание начальных данных и способов их обработки потоками.
- Возможность достижения более высокого ускорения по сравнению с использованием технологии OpenMP.
Одним из недостатков данной технологии является необходимость реализации согласованного доступа к общим ресурсам и синхронизации выполнения потоков с помощью системных или пользовательских механизмов.