NEW
Font size
WorksheetsБагатопотоковість і синхронізація
Total questions: 44
Worksheet time: 22mins
Який клас у C++11 безпосередньо використовується для створення нового потоку виконання?
std::process
std::thread
std::task
std::job
Який із наведених прикладів коректно створює потік, що викликає функцію foo без аргументів?
std::thread t(foo());
std::thread t = foo;
std::thread t(foo);
std::thread t(&foo());
Як правильно приєднати потік t до головного потоку?
t.wait();
join(t);
t.join();
t.close();
Що таке «гонка даних» (data race)?
Паралельне виконання різних програм на одному ПК
Одночасний доступ декількох потоків до спільних даних без належної синхронізації
Ситуація, коли потік зависає через очікування вводу
Помилка компіляції при роботі з потоками
Який клас використовується для взаємного виключення доступу до спільних ресурсів?
std::lock
std::guard
std::mutex
std::atomic_mutex
Який клас дозволяє гнучко блокувати і розблоковувати м’ютекс?
std::flex_lock
std::unique_lock
std::scoped_lock
std::shared_lock
Що буде, якщо викликати join() для потоку, який вже приєднали?
Потік буде перезапущений
Виникне виняток або std::terminate()
Нічого
Потік від’єднається
Що робить метод detach()?
Об’єднує два потоки
Завершує потік
Від’єднує потік для фонової роботи
Призупиняє потік
Яка умова є необхідною для виникнення deadlock?
Відсутність пріоритетів
Наявність атомарних змінних
Взаємне очікування ресурсів
Багато потоків у програмі
Який шаблонний клас використовується для атомарних операцій?
std::atomic
std::volatile
std::sync
std::atomic_mutex
Що забезпечує std::atomic
Вищу швидкість без гарантій
Гарантію відсутності гонки даних для цієї змінної
Роботу тільки в одному потоці
Автоматичне блокування м’ютекса
Який тип блокування дозволяє кільком читачам одночасно читати дані?
std::mutex
std::shared_mutex
std::atomic_mutex
std::unique_mutex
Що таке thread-safe код?
Код, що компілюється у будь-якій ОС
Код, що працює без гонок даних у багатопотоковому середовищі
Код для потоків CPU
Код без викликів ОС
Який контейнер є thread-safe для одночасного читання?
std::vector
std::map
будь-який контейнер STL
будь-який контейнер, якщо він не змінюється
Яке правило діє для доступу до масиву з різних потоків?
Читання можна виконувати без синхронізації, якщо масив не змінюється
Читання завжди потребує mutex
Писати можна без mutex
Масив завжди thread-safe
Який спосіб перевірки атомарної змінної є коректним?
atomic.get()
atomic.value
static_cast
atomic.load()
Як виконати атомарне інкрементування?
x = x + 1
++x
x.fetch_add(1);
x.add(1)
Як розбудити всі потоки, що чекають на condition_variable?
notify_all()
wake_all()
broadcast()
release_all()
Який підхід дозволяє уникати гонок під час читання та запису без м’ютексів?
volatile
atomic
static
inline
Що таке thread pool?
Набір функцій
Група потоків, що перевикористовуються
Набір м’ютексів
Набір atomic-змінних
Який компонент відповідає за балансування завдань у thread-pool?
dispatcher
mutex allocator
pool router
balancer lib
Яка структура даних найчастіше використовується для черги завдань у продюсер-споживачі?
std::stack
std::queue
std::vector
std::map
Яка операція гарантує атомарний обмін значень?
exchange()
swap()
copy()
switch()
Який спосіб гарантує коректну передачу даних між потоками?
Глобальні змінні
Атомарні змінні та синхронізація
Локальні статичні масиви
Масиви без блокувань
Який тип синхронізатора в Windows дозволяє потокам сигналізувати про настання певної події?
Semaphore
Mutex
Event
Timer
Яка функція створює подію (Event) у WinAPI?
CreateSignal
CreateEvent
InitEvent
OpenEventEx
Які два режими роботи Event існують?
Timed / Infinite
Auto-reset / Manual-reset
Normal / Extended
Single / Multi thread
Що робить функція SetEvent()?
Скидає подію в несигнальний стан
Знищує подію
Встановлює подію в сигнальний стан
Очікує на подію
Яка функція переводить Event у несигнальний стан?
ResetEvent
StopEvent
SwitchEvent
UnsigEvent
Що таке Critical Section?
Механізм синхронізації між процесами
Легкий механізм синхронізації потоків у межах одного процесу
Подія ОС
Механізм очікування
Яка функція ініціалізує Critical Section?
InitCS
CreateCriticalSection
InitializeCriticalSection
StartCritical
Яка функція входу в Critical Section?
EnterCriticalSection
LockCritical
WaitCritical
BeginCritical
Яка перевага Critical Section над Mutex?
Може працювати між процесами
Швидша, оскільки працює у користувацькому режимі
Завжди генерує подію пробудження
Має таймаути
Який механізм використовується для обмеження кількості потоків, що можуть одночасно увійти у критичний ресурс?
Event
Mutex
Semaphore
ThreadLimit
Яка функція створює семафор у WinAPI?
CreateSemaphore
InitSemaphore
OpenSem
SemaphoreOpen
Що означає параметр lInitialCount у CreateSemaphore?
Максимальна кількість потоків
Кількість потоків, що чекають у черзі
Початкова кількість доступних ресурсів
Таймаут очікування
Яка функція використовується для очікування одного об’єкта синхронізації?
WaitOne
WaitForObject
WaitForSingleObject
SyncWait
Який результат повертає WaitForSingleObject, якщо об’єкт увійшов у сигнальний стан?
WAIT_INFINITE
WAIT_READY
WAIT_OBJECT_0
WAIT_CONTINUE
Як змусити потік чекати на кілька подій одночасно?
WaitForEvents
WaitForMultipleObjects
MultiWait
ParallelWait
Який параметр WaitForMultipleObjects дозволяє очікувати всі об’єкти?
WAIT_ALL
TRUE
MULTI_ALL
WAIT_EVERY
Що поверне WaitForMultipleObjects, якщо жоден об’єкт не був сигналізований до закінчення таймауту?
WAIT_OBJECT_0
WAIT_FINISHED
WAIT_TIMEOUT
WAIT_DEADLOCK
Який синхронізатор можна використовувати між процесами?
Critical Section
Atomic
Mutex та Semaphore
std::unique_lock
Що відбувається, коли семафор досягає значення 0?
Нові потоки ігноруються
Потоки блокуються, доки інший не виконає ReleaseSemaphore
Семафор перезапускається
Усі потоки завершуються
Яка функція збільшує лічильник семафора?
AddSemaphore
IncSemaphore
ReleaseSemaphore
SetSemaphore
