首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个POSIX线程

多个POSIX线程
EN

Stack Overflow用户
提问于 2013-10-18 22:08:50
回答 2查看 371关注 0票数 0

我有一个家庭作业的问题,我现在被困住了。问题的参数如下。1.)它必须接受来自用户的总共5个整数。

2.)它必须有三个线程,每个线程执行不同的函数(平均、最小和最大)。

我遇到的问题是声明一个包含5个元素的全局数组空数组,然后修改这些元素。每次我都有段错,告诉我我做得不对。顺便说一句,语言是C,绝对不是C++ (我不允许使用它)。如果有人能帮助我理解出了什么问题,我会非常感激的。此外,如果它是一个副本(我看过了,我没有看到任何解决这些问题),请告诉我的问题或文章,它的地址,谢谢。

代码:

代码语言:javascript
复制
#include <stdio.h>
#include <pthread.h>

void *avgWorker(int in[]);
void *minWorker(int in[]);
void *maxWorker(int in[]);

int main(void)
{
  int it, *input;

  int in[5];

  pthread_t tid1,tid2,tid3;
  pthread_attr_t attr1, attr2,attr3;

  for (it = 0; it < 5; ++it)
    {
      printf("Please enter number %d of 5\n", (it + 1));

      input[it] = scanf("%d");
    }

  pthread_attr_init(&attr1);
  pthread_attr_init(&attr2);
  pthread_attr_init(&attr3);

  pthread_create(&tid1, &attr1, avgWorker(in), NULL);
  pthread_create(&tid2, &attr2, minWorker(in), NULL);
  pthread_create(&tid3, &attr3, maxWorker(in), NULL);

  pthread_join(tid1,NULL);
  pthread_join(tid2,NULL);
  pthread_join(tid3,NULL);

  return 0;
}

void *avgWorker(int in[])
{
  int total, avg, it;

  total = 0;

  for (it = 0; it < 5; ++it)
    {
      total += in[it];
    }

  avg = 0;

  avg = total / 5;

  printf("\n The average value is: %d. \n", avg);
}

void *minWorker(int in[])
{
  int min, it;
  min = 99999;

  for (it = 0; it < 5; ++it)
    {
      if (in[it] < min)
    min = in[it];
    }

  printf("The minimum value is: %d\n", min);
}

void *maxWorker(int in[])
{
  int max, it;

  max = -99999;

  for (it = 0; it < 5; ++it)
    {
      if (in[it] > max)
    max = in[it];
    }

   printf("The maximum value is: %d \n", max);
}

最后,我使用gcc编译这个代码,并使用-lpthread标志。再次感谢您提供的任何帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-18 22:13:30

这就是它应该崩溃的地方:

代码语言:javascript
复制
input[it] = scanf("%d");

scanf返回读取的字段数,而不是读取的数据。存储数据的变量的地址应该作为参数传递。如下所示:

代码语言:javascript
复制
scanf("%d", &input[it]);

另外,input只是一个未初始化的指针。它没有指向任何地方(有意义)。我想你想要的是in,而不是input。您根本不需要input变量。

票数 5
EN

Stack Overflow用户

发布于 2013-10-18 22:14:13

你的问题就在眼前

代码语言:javascript
复制
input[it] = scanf("%d");

查找scanf的语法。您需要提供存储数据的地址,因此

代码语言:javascript
复制
scanf("%d", input+it);

应该是个进步。或者

代码语言:javascript
复制
scanf("%d", &input[it]);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19459810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档