Назад к задачам
Junior — Senior
5

Отображение идентификаторов и счётчиков из разных потоков

Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Опишите и разберите поведение следующей программы, использующей стандартную библиотеку C++ для создания и управления потоками.

void worker() {
    constexpr uint8_t SIZE = 10u;
    for (uint8_t i = 0u; i < SIZE; ++i) {
        std::cout << std::this_thread::get_id() << " => " << i << std::endl;
    }
}
int main(int argc, char** argv) {
    std::thread t1(worker);
    std::thread t2(worker);
    if (t1.joinable()) {
        t1.join();
    }
    if (t2.joinable()) {
        t2.join();
    }
    return EXIT_SUCCESS;
}

В ответе объясните, как происходит вывод из двух одновременно работающих потоков, почему используется joinable() и join(), а также какое влияние может оказывать планировщик потоков на порядок печати.