C++ | Поради
вступ
Потоки в C++ дозволяють розробникам виконувати кілька завдань одночасно, що робить додатки більш ефективними та відгукливими. У цій статті ми розглянемо, як використовувати потоки в C++ з прикладами та кращими практиками.
Що таке потік?
Потік — це легкий процес, який може працювати одночасно з іншими потоками в тій самій програмі. C++ надає клас std::thread
для керування потоками, що дозволяє розробникам легко створювати та контролювати потоки.
Базовий приклад потоку
Розпочнемо з простого прикладу, де потік безперервно виводить повідомлення кожні дві секунди:
#include
#include
#include
static bool s_Finished = false;
void DoSomeWork()
{
using namespace std::literals::chrono_literals;
while(!s_Finished)n";
std::this_thread::sleep_for(2s);
}
}
int main()
{
std::thread worker(DoSomeWork);
std::cin.get();
s_Finished = true;
worker.join();
std::coutn";
return 0;
}
Пояснення:
- Функція
DoSomeWork
працює безперервно, покиs_Finished
не стане true. - Створюється потік
std::thread
для виконання функціїDoSomeWork
. - Використовуємо
std::cin.get()
, щоб почекати введення користувача перед зупинкою потоку. - Потік приєднується за допомогою
worker.join()
, щоб забезпечити його завершення до виходу з програми.
Запуск кількох потоків
Ви можете запускати кілька потоків для одночасного виконання завдань:
#include
#include
#include
void PrintNumbers(int start, int end)
{
for (int i = start; i <= end; ++i)
{
std::cout << "Number: " << i << "\n";
}
}
int main()
{
std::vector threads;
for (int i = 0; i < 5; ++i)
{
threads.emplace_back(PrintNumbers, i * 10, (i + 1) * 10 - 1);
}
for (auto& thread : threads)
{
thread.join();
}
std::cout << "All threads completed!\n";
return 0;
}
Основні висновки:
- Створення потоку: Використовуйте
std::thread
, щоб легко створювати потоки. - Синхронізація потоків: Використовуйте
join()
, щоб забезпечити завершення потоків до виходу з програми. - Кілька потоків: Використовуйте цикли для запуску та управління кількома потоками.
YouTube відео
Висновок
Потоки в C++ — це потужні інструменти для паралельного програмування, що дозволяють покращити продуктивність завдань, які можна виконувати одночасно. Розуміючи основи керування потоками та синхронізації, ви можете писати ефективні багатопоточні додатки.
Перекладено з: Understanding C++ Threads: A Complete Guide