Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

std::thread 練習帳その1

以下のコードはコンパイルに失敗し、Attempt to use a deleted function となる。

#include <thread>

void update(int& data) {
    data += 2;
}

int main(int argc, const char * argv[]) {

    int data = 11;
    std::thread t(update, data);
    t.join();
    
    printf("%d\n", data);

    return 0;
}


以下のコードはコンパイルできる。
std::refは引数の参照を返す関数テンプレートである。

void update(int& data) {
    data += 2;
}

int main(int argc, const char * argv[]) {

    int data = 11;
    std::thread t(update, std::ref(data));
    t.join();
    
    printf("%d\n", data);

    return 0;
}