我正在学习如何使用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/

10-12 17:29