【问题标题】:c++ : threading variable declaration and affectation [closed]c ++:线程变量声明和影响[关闭]
【发布时间】:2013-01-07 08:34:46
【问题描述】:

我在 VS 2008 中有这种 c++ 代码:

int x function(int a, int b){
    int var1;
    int var2;
    var1*=a;
    var2*=b;
    return a+b;
}

我该怎么做:

int x function(int a, int b){
    thread1 {
        int var1;
        var1*=a;
    }

    thread2{
        int var2;
        var2*=b;
    }

    thread1.join();
    thread2.join();
    return a+b;
}

不创建 2 个其他函数?

【问题讨论】:

  • 不清楚您要做什么。您不会将var1var2 初始化为任何特定的值,然后将它们相乘,然后将它们的值丢弃。这真的没有任何意义。无论如何,将工作分派到一个线程(或者更糟糕的数量级,加入一个线程)的成本远高于单次乘法的成本,那么使用线程有什么意义呢?
  • int x function(int a, int b) 是什么意思?
  • 知道std::thread works here,如果这就是你要找的全部。
  • 我想知道是否可以在不创建函数的情况下在两个不同的线程中分配 2 个变量(只是线程化 c++ 代码的一部分)。但大卫回答了这个问题,线程成本 > 分配跨度>
  • 我知道这不是真正的 C++ 代码,而是伪代码。所以问题是是否有任何方法可以创建两个线程而不创建两个单独的函数,对吗?嗯,我认为不是,至少通过使用 POSIX 函数或我知道的任何外部库,您必须始终创建一个函数并通过线程启动函数调用它。

标签: c++ multithreading variable-assignment


【解决方案1】:

也许std::future 是你所追求的?但我不确定它是否适用于 VS2008,但它适用于 VS2012 顺便说一句:

int Function(int a, int b)
{
  std::future<int> a1 = std::async( [a](){ return a*2; } ); 
  std::future<int> b1 = std::async( [b](){ return b*3; } );

  return a1.get() + b1.get();
}

未来结帐参考:this

【讨论】:

  • 我尝试在我的计算机的每个核心上初始化我的变量,我会试试这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
相关资源
最近更新 更多