C ++ 11 Threads, это правильный код?

0

Я играю с функциями потоков С++ 11. Но следующий код не компилируется как для clang (3.5), так и для gcc (4.9.2).

#include <iostream>
#include <thread>

void add(int& x) {
    x += 1;
}

int main (int argc, char const *argv[])
{
    int x{ 5 };
    int y{ 8 };

    std::thread my_thread_1{ add, x };
    std::thread my_thread_2{ add, y };
    my_thread_1.join();
    my_thread_2.join();

    std::cout << x << " " << y << std::endl;

    return 0;
}

Действительно ли это С++ 11?

Теги:
multithreading
c++11

1 ответ

7
Лучший ответ

Он действителен, но класс потока копирует его аргументы, поэтому вы не можете использовать ссылки напрямую. Вы должны использовать std::ref чтобы заставить его работать:

std::thread my_thread_1{ add, std::ref(x) };
  • 0
    Благодарю. Кажется, что книга Бьярна Страуструпа «Язык программирования C ++, четвертое издание» делает эту ошибку на странице 116. Вот почему я был очень озадачен.
  • 0
    Должны ли мы добавить std :: ref даже для константной ссылки?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню