在pthread_creation中传递的参数

时间:2014-11-09 23:52:12

标签: c++ c

我正在学习如何使用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?我该如何解决这个问题?

提前致谢

1 个答案:

答案 0 :(得分:4)

(stack<int>) numbers = *((stack<int>*) argument);

cast是零大小集的根。第一个C-Type强制转换创建一个临时的未命名对象,作为在赋值后消失的数字副本。 numbers永远不会改变。成功:

numbers = *((stack<int>*) argument);