pthread函数的返回值与函数内的计算值不同
Returned value from pthread function is different from the calculated value within function
现在我正在尝试使用pthread函数的返回值。在下面的代码中,我想要得到的输出是"3899"或"9938",但程序输出的是"9999"或"3838"。当我在pthread函数中放入"cout"时,输出是正确的,但当我在main函数中放入"cout"时,输出却是错误的。有人能帮我检查一下我哪里做错了吗?
using namespace std;
#define NTHREADS 2
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
struct args{
int * numbers;
float result;
};
void *add(void* a){
struct args *number = (struct args *)a;
pthread_mutex_lock( &mutex1 );
int *n = (int*) number->numbers;
float sum =0;
for(int i = 0; i < 5; i++){
sum = sum + n[i] +5;
}
float av = sum/5;
number-> result = av;
//cout << number->result <<endl;
pthread_mutex_unlock( &mutex1 );
return number;
}
void *substract(void* a){
struct args *number = (struct args *)a;
pthread_mutex_lock( &mutex1 );
int *n = (int*) number->numbers;
float sum =0;
for(int i = 0; i < 5; i++){
sum = sum + n[i] *3;
}
float av = sum/5;
number-> result = av;
// cout << number->result <<endl;
pthread_mutex_unlock( &mutex1 );
return number;
}
main(){
pthread_t thread_id[NTHREADS];
int i, j;
int *numbers = new int[5];
numbers[0] = 34; numbers[1] = 2; numbers[2]= 77; numbers[3] = 40; numbers[4] = 12;
struct args a;
a.numbers = numbers;
pthread_create( &thread_id[0], NULL, add, (void*) &a);
pthread_create( &thread_id[1], NULL, substract, (void*) &a );
void *status1;
void * status2;
pthread_join( thread_id[0], &status1);
pthread_join( thread_id[1], &status2);
args status = *(args*) status1;
float ra = status.result;
cout << ra << endl;
args statuss = *(args*) status2;
float rb = statuss.result;
cout << rb << endl;
exit(EXIT_SUCCESS);
}
您得到这个输出是因为两个线程都将结果写入同一个位置struct args a
。
您需要在主函数中分配两个struct args
,并将其中一个的地址传递给第一个线程,另一个传递给第二个线程。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 函数计算用户按下按钮的频率
- C++ 在编译时具有函数计算全局变量
- C++ - 使用特定函数计算 x 和 y 的最终值
- 尝试使用函数计算有剩余球员的球队数量
- 我正在尝试创建一个布尔函数,该函数计算字符并在字符为"()*-+"时返回 true
- 哈希函数计算
- 为什么 if 语句对于运算符重载函数计算 false
- 使用C 中的内在函数计算相交
- 如何使用 2 个迭代器进行求和函数计算映射<字符串、双精度>
- vector.size() 函数计算量大吗?
- 如何使用opencv函数计算图像的孔数(二进制)
- 斐波那契函数计算不正确
- 如何用3个用户定义的函数计算一个数字的真平方根
- 元函数计算 x^n 并返回整数限制而不溢出(如果不可能)
- 使用递归函数计算字符串中的元音
- 如何使用 pow() 函数计算 C++ 中超过 2^32 的幂
- 返回 void 的函数的无序函数计算
- 在 C++ 中使用尾递归函数计算列表的总和
- 使用结构和函数计算线的长度