关于创建多线程程序的一个问题,请求大佬们出手相助(在Linux的Ubuntu上运行)

编写一个多线程程序,计算一组数字的多种统计值。要求:在父线程中定义用数组定义10个整数,把最小值、最大值和平均值变量作为全局变量,创建三个单独工作线程(子线程),第一个线程求数字的平均值,第二个线程求最大值。第三个线程求最小值。当工作线程退出时,父线程将输出这些值。

java的话 你可以搜一下countdownlatch的使用。

        public class ThreadTest {
    public static void main(String[] args) {
        int[] arr = new int[]{6,1,89,32,22,35,23,34};
        ExecutorService service = Executors.newFixedThreadPool(3);
        CountDownLatch latch = new CountDownLatch(3);
        AtomicInteger avg = new AtomicInteger();
        AtomicInteger max = new AtomicInteger();
        AtomicInteger min = new AtomicInteger();
        service.execute(() -> {
            avg.set(avg(arr));
            latch.countDown();
        });
        service.execute(() -> {
            max.set(max(arr));
            latch.countDown();
        });
        service.execute(() -> {
            min.set(min(arr));
            latch.countDown();
        });
        try {
            latch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("min=" + min.get() + ",max =" + max.get() + ",avg=" + avg.get());
    }

    private static int avg(int[] arr){
        int sum = 0;
        for (int i : arr) {
            sum = sum + i;
        }
        return sum/arr.length;
    }

    private static int max(int[] arr){
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
           if (max < arr[i]){
               max = arr[i];
           }
        }
        return max;
    }

    private static int min(int[] arr){
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (min > arr[i]){
                min = arr[i];
            }
        }
        return min;
    }
}

#include <thread>
#include <stdio.h>

int minValue = 0;
int maxValue = 0;
int averageValue = 0;

void max(int a[], int size)
{

    for (int i = 0; i < size; ++i)
    {
        if (a[i] > maxValue)
        {
            maxValue = a[i];
        }
    }
}

void min(int a[], int size)
{
    minValue = INT_MAX;
    for (int i = 0; i < size; ++i)
    {
        if (a[i] < minValue)
        {
            minValue = a[i];
        }
    }
}

void average(int a[], int size)
{
    int sum = 0;
    for (int i = 0; i < size; ++i)
    {
        sum += a[i];
    }

    if (size > 0)
    {
        averageValue = sum / size;
    }

}


void main()
{
    int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

    std::thread calcMinWorkThead(min, a, 10);
    std::thread calcMaxWorkThead(max, a, 10);
    std::thread calcAverageWorkThead(average, a, 10);

    calcMinWorkThead.join();
    calcMaxWorkThead.join();
    calcAverageWorkThead.join();

    printf("min value:%d, max value:%d, average value:%d\n", minValue, maxValue, averageValue);

}