C++ 线程和变量

标签 c++ multithreading c++11

我在编写的程序中遇到问题。我有返回指针的函数,在 main() 中我想在线程中运行它们。

我能够在线程中执行函数:

double* SplitFirstArray_1st(double *arr0){
    const UI arrSize = baseElements/4;
    std::cout << "\n1st split: \n";
    double *arrSplited1=nullptr;
    arrSplited1 = new double [arrSize];
    for(UI i=0; i<arrSize; i++){
        arrSplited1 = arr0;
    }

    for(UI j=0; j< arrSize; ++j){
        std::cout << arrSplited1[j] << " ";
        }
    return arrSplited1;
    delete [] arrSplited1, arr0;

在主函数中

std::thread _th1(SplitFirstArray_1st, rootArr);
                _th1.join();

以上不是我要的。我有另一个指针:

*arrTh1=nullptr;

我想在一个线程中使用它,这样它就会被分配我的函数 SplitFirstArray_1st 返回的值

arrTh1 = SplitFirstArray_1st(xxx);

这样的 Action 是否可以一步步执行?

最佳答案

不返回变量,传递一个指向变量的指针并将值也设置在这个点上。

即:

void set_int(int* toset) {
  *toset = 4;
}

这适用于已经是指针的东西:

void set_ptr(int** toset) {
  *toset = new int[4];
  // ...
  *toset[0] = 2;
}

如果函数返回,您可以知道数据可以安全使用。

完全不相关的注释:

  return foo;
  // No point placing code here unless you used goto as it won't get executed.
  // Also: don't use goto.
}

关于C++ 线程和变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54392857/

相关文章:

c++ - 不匹配 ‘operator+=’ aka std::_Rb_tree_const_iterator std::map

c++ - 这些成员是否有未指定的顺序?

c++ - 没有默认构造函数的类 vector

java - 在 Java 中,更改对并发读取的 HashMap 的引用是否安全

android - 使用来自 MainActivity 的数据的新并行 Activity

c++ - 如何使用 boost::program_options 创建选项别名?

c++ - 需要语法帮助以根据模板参数的类型专门化类方法

c++ - "this"指针和容器

c++ - 在 STL 中,如何交换二维 vector

c# - 既然有SpinWait,为什么还要使用SpinLock呢?