簡體   English   中英

多個POSIX線程

[英]multiple POSIX threads

我目前有一個家庭作業問題。 問題的參數如下。 1.)它必須接受用戶總共5個整數。

2.)它必須具有三個線程,每個線程執行不同的功能(平均,最小值和最大值)。

我遇到的問題是聲明一個由5個元素組成的空數組,然后修改這些元素。 每次我遇到段錯誤時,都會告訴我我做錯了。 順便說一句,該語言是C,很明顯不是C ++(不允許使用它)。 如果有人可以幫助我了解問題所在,我將不勝感激。 另外,如果它是重復項(我看過,沒有看到任何解決這些問題的信息),請指出要解決的問題或文章。謝謝。

碼:

#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標志來編譯此代碼。 再次感謝您提供的任何幫助。

這是應該崩潰的地方:

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

scanf返回讀取的字段數,而不是讀取的數據。 存儲數據的變量地址應作為參數傳遞。 像這樣:

scanf("%d", &input[it]);

input也只是一個未初始化的指針。 它沒有指向任何地方(有意義)。 我猜你想要in ,而不是input 您根本不需要input變量。

你的問題就在這里

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

查找scanf的語法...您需要提供存儲數據的地址,因此

scanf("%d", input+it);

應該有所改善。 或者-如@dreamlax所指出的那樣,以獲得更易讀的代碼

scanf("%d", &input[it]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM