gpt4 book ai didi

c++ - 传入 pthread_creation 的参数

转载 作者:太空宇宙 更新时间:2023-11-04 01:28:45 26 4
gpt4 key购买 nike

我正在学习如何使用 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 类型转换创建一个临时的未命名对象作为数字的拷贝,该对象在分配后消失。 numbers 永远不会改变。做到:

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

关于c++ - 传入 pthread_creation 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26834734/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com