我正在学习如何使用pthread函数。
在这里,我想使用pthread_create创建一个线程,并用它计算一些数字的平均值。
(数字序列末尾的0表示已完成)
到目前为止,这是我写的:
#include<stdio.h>
#include<stack>
#include<pthread.h>
using namespace std;
void *Thread1(void*argument)
{
printf("in Thread1\n");
int sum=0;
int count=0;
stack<int> numbers;
(stack<int>) numbers = *((stack<int>*) argument);
int size = numbers.size();
while(numbers.size()!=0)
{
sum=sum+numbers.top();
count=count+1;
numbers.pop();
}
int result= sum / count;
printf("Average is :");
printf("%d",result);
pthread_exit(0);
}
int main(void)
{
printf("Enter your numbers\n");
int num;
stack<int> numStack;
scanf("%d",&num);
numStack.push(num);
while( num!=0)
{
scanf("%d",&num);
numStack.push(num);
}
numStack.pop();
pthread_t myThread;
int ret;
ret=pthread_create(&myThread,NULL,Thread1,&numStack);
if (ret<0)
printf("Thread Creation Failed\n");
pthread_join(myThread,NULL);
return 0;
}
当我得到main中堆栈的大小并通过打印对其进行检查时,这是正确的,但是当我在Thread1函数中执行相同操作时,大小为0。因此,我得到了
Floating point exception (core dumped)
错误。
为什么我的堆栈大小变为0?我怎么解决这个问题?
提前致谢
最佳答案
这个
(stack<int>) numbers = *((stack<int>*) argument);
cast是零大小集的根。第一个C-Type强制转换会创建一个临时的未命名对象,作为数字副本,在分配后消失。
numbers
从未更改。做了:numbers = *((stack<int>*) argument);
关于c++ - 在pthread_creation中传递的参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26834734/