C++ 使用pthread同步函数以对数组执行一些简单操作
我正在学习pthread,但对如何使用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
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++代码。