Pthread_create函数

时间:2014-03-08 19:58:33

标签: multithreading function pthreads

我很难理解pthread的创建。

这是我在代码开头声明的函数

void *mini(void *numbers);   //Thread calls this function

线程初始化

pthread_t minThread;

pthread_create(&minThread, NULL, (void *) mini, NULL);



void *mini(void *numbers)
{
    min = (numbers[0]);
    for (i = 0; i < 8; i++)
    {
        if ( numbers[i] < min )
        {
            min = numbers[i];
        }
    }

    pthread_exit(0);

}

numbers是一个整数数组

int numbers[8];

我不确定我是否正确创建了pthread。 在函数mini中,我得到以下关于设置min(声明为int)等于数字[0]的错误:

Assigning to 'int' from incompatible type 'void'

我的目标是计算此线程中数字[](min)的最小值,并稍后使用该值将其传递给另一个线程以显示它。感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:1)

你需要通过&#39;数字&#39;作为pthread_create()的最后一个参数。然后,新主题可以调用“mini&#39;使用&#39;数字&#39;在自己的堆栈上作为论点。

在&#39; mini&#39;中,你应该将void *转换回整数数组,以便正确地取消引用它 - 你不能直接取消引用void * - 它不指向任何东西:)

此外,在不同的主题中使用名称&#39;数字&#39;来容纳多个变量非常令人困惑。

答案 1 :(得分:0)

这个pgm中有一些小的不正确之处,但它基本上说明了你想要做什么。你应该四处游玩,打破并改进它。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void *mini(void *numbs)
{
    int *numbers = (int *) numbs;

    int *min = malloc(sizeof(int));

    *min = (numbers[0]);

    for (int i = 0; i < 8; i++)
        if (numbers[i] < *min )
            *min = numbers[i];

    pthread_exit(min);
}

int main(int argc, char *argv[])
{
    pthread_t minThread;

    int *min;

    int numbers[8] = {28, 47, 36, 45, 14, 23, 32, 16};

    pthread_create(&minThread, NULL, (void *) mini, (void *) numbers);

    pthread_join(minThread, (void *) &min);

    printf("min: %d\n", *min);

    free(min);

    return(0);
}