Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用pthread同步函数以对数组执行一些简单操作_C++_Multithreading_Pthreads - Fatal编程技术网

C++ 使用pthread同步函数以对数组执行一些简单操作

C++ 使用pthread同步函数以对数组执行一些简单操作,c++,multithreading,pthreads,C++,Multithreading,Pthreads,我正在学习pthread,但对如何使用pthread来同步函数感到困惑 例如,我有一个简单的代码,可以对数组执行以下操作: float add(int numbers[5]){ float sum; for(int i = 0; i < 5; i++){ sum = sum + numbers[i] +5; } return sum/5; } float subtract(int numbers[5]){ float sum; for(int i = 0; i

我正在学习pthread,但对如何使用pthread来同步函数感到困惑

例如,我有一个简单的代码,可以对数组执行以下操作:

float add(int numbers[5]){
  float sum;
  for(int i = 0; i < 5; i++){
  sum = sum + numbers[i] +5;
  }
  return sum/5;
}
float subtract(int numbers[5]){
  float sum;
  for(int i = 0; i < 5; i++){
    sum = sum + numbers[i] -10;
  }
  return sum/5;
}
float mul(int numbers[5]){
  float sum;
  for(int i = 0; i < 5; i++){
    sum = sum + (float)numbers[i] * 1.5 ;
  }
  return sum/5;
}
float div(int numbers[5]){
  float sum;
  for(int i = 0; i < 5; i++){
    sum = sum + (float)numbers[i]/ 2;
  }
  return sum/5;
}

int main(){
  int numbers [5] = { 34, 2, 77, 40, 12 }; 
  float addition = add(numbers);

  float subtraction = subtract(numbers);

  float multiplication = mul(numbers);

  float division = div(numbers);

  cout << addition + subtraction + multiplication + division << endl;
    return -1;
}
float add(整数[5]){
浮点数;
对于(int i=0;i<5;i++){
总和=总和+数字[i]+5;
}
返回金额/5;
}
浮点减法(整数[5]){
浮点数;
对于(int i=0;i<5;i++){
总和=总和+数字[i]-10;
}
返回金额/5;
}
浮点mul(整数[5]){
浮点数;
对于(int i=0;i<5;i++){
总和=总和+浮点数[i]*1.5;
}
返回金额/5;
}
浮点div(整数[5]){
浮点数;
对于(int i=0;i<5;i++){
总和=总和+浮点数[i]/2;
}
返回金额/5;
}
int main(){
整数[5]={34,2,77,40,12};
浮点加法=加法(数字);
浮点减法=减法(数字);
浮点乘法=mul(数字);
浮点数=div(数字);

cout首先,我怀疑,您不清楚数组是如何传递到函数中的。
float subtract(int numbers[5])
没有说明传递数组的大小。它相当于
float subtract(int numbers[])
(no size),而float subtract(int*numbers)`(指向int的指针)。您的函数中也有一个bug,因为您在首次使用(以及其他函数)之前没有初始化float

考虑到这一点,整个减法函数最好这样编写:

float subtract(int* numbers, const size_t size) {
  float sum = 0;
  for(int i = 0; i < size; i++) {
    sum = sum + numbers[i] -10;
  }
  return sum/5;
}
浮点减法(整数*数字,常量大小){
浮点数和=0;
对于(int i=0;i
现在,一旦我们清除了函数本身,我们就可以处理多线程。我真的建议放弃p螺纹,而使用C++ 11线程能力。当需要将结果作为函数的返回值时,这尤其正确。用pTrx进行它需要太多的键入。C++中的相关代码将是Loo。国王与此相似:

int numbers[] = {34, 2, 77, 40, 12}; // No need to provide array size when inited
auto sub_result = std::async(std::launch::async, &subtract, numbers, sizeof(numbers) / sizeof(*numbers);
auto div_result = .... 
// rest of functions
std::cout << "Result of subtraction: " << div_result.get();
intnumbers[]={34,2,77,40,12};//初始化时无需提供数组大小
自动sub_结果=std::async(std::launch::async,&subtract,numbers,sizeof(numbers)/sizeof(*numbers);
自动除法结果=。。。。
//其他功能

STD::首先要学习的是如何将数据传递到线程,并查看线程传递给启动函数的空洞指针。然后,调整您的代码使用pthult.无论如何,用一个异步函数调用开始更小,这样,我建议您使用C++线程,而不是p螺纹,因为它们与操作更好地交互。C++代码。