Page 71 - 4989
P. 71
кількості логічних процесорів можна скористатись функцією
void WINAPI GetSystemInfo( _Out_ LPSYSTEM_INFO lpSystemInfo);
У результаті її виклику заповнюється структура типу
SYSTEM_INFO, у якій кількість логічних процесорів зберігається
в полі dwNumberOfProcessors.
ОС Windows є багатозадачною, тобто підтримує виконання
багатьох потоків одночасно (якщо в системі встановлено
багатоядерний процесор і/або кілька процесорів) або почергово,
швидко перемикаючи потоки, так що у користувача створюється
ілюзія їх одночасного виконання. Спосіб планування потоків
реалізує витісняючу багатозадачність: кожному потоку ОС
виділяє квант часу фіксованого розміру, по завершенні якого
потік витісняється іншим потоком. Витіснення може відбутись і
раніше, ніж завершиться квант часу, якщо:
- виконання потоку було призупинено функцією Sleep;
- потік перейшов у стан очікування об’єкта синхронізації;
- з’явився готовий до виконання потік з вищим пріоритетом;
- потік завершив виконання.
АРІ-функція Sleep призупиняє виконання потоку на час,
заданий у якості її аргумента (в мілісекундах). Ця функція не
забезпечує точність задання часового інтервалу (реальна
тривалість «сну» може відрізнятись на кілька мілісекунд). У
багатьох випадках така точність прийнятна, однак якщо слід
задати точний інтервал часу, краще скористатись об’єктом
синхронізації WaitableTimer.
Детальну інформацію по функціям для роботи з потоками і
процесами можна знайти за посиланням
https://msdn.microsoft.com/en-
us/library/windows/desktop/ms684847%28v=vs.85%29.aspx
7.3.2 Засоби синхронізації потоків
Оскільки потоки в багатозадачній ОС можуть виконуватись
одночасно, то можлива ситуація, коли кілька потоків одночасно
намагаються звернутись до деяких спільних даних. Якщо два
потоки виконують одночасний запис, така ситуація найбільш
71