C++11 线程,它是有效代码吗?

标签 c++ multithreading c++11

我正在研究 C++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;
}

C++11 有效吗?

最佳答案

它是有效的,但是线程类复制它的参数,所以你不能直接使用引用。你必须使用 std::ref使其工作:

std::thread my_thread_1{ add, std::ref(x) };

关于C++11 线程,它是有效代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26977946/

相关文章:

python - 如何并行运行多个 Selenium 驱动程序?

c++ - CMake + qtcreator + MinGW + Debug模式 + Windows 7

c++ - 为什么非静态数据成员引用不是变量?

c++ - Visual Studio 2012 错误 C2039 : 'serialize' : is not a member of 'std::shared_ptr<_Ty>'

c++ - QObject::connect: QT 上没有这样的插槽

C++ 二进制文件 - 写入整数 - 奇怪的行为

c++ - SDL 中的 Fill_Rect

python - 在阻塞脚本的线程中循环

java - 一会儿,两个服务器线程互相阻塞

c++ - 作用域 std::unique_ptr 转换