我很难理解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)的最小值,并稍后使用该值将其传递给另一个线程以显示它。感谢您提供的任何帮助。
答案 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);
}