void * consumer_child(void *arguments){
Range rng = *((Range *) arguments);
//prinnting with the range to easily identify each thread
printf("consumer_child[%d-%d] started\n", rng.start, rng.end );
pthread_exit(0);
}
当我打印它时,它打印内存位置,而不是值。我需要打印该值。
在主线程中,开始和结束值设置正确。我已经检查过了。
在 main 中,我将参数设置如下
Range *rng = malloc(sizeof(*rng));
rng->start = i * numbersPerChild;
rng->end = (numbersPerChild * (i + 1)) -1 ;
printf("Range for thread %d is %d to %d\n", i, rng->start, rng->end );
printf("test print %d\n",rng->start);
pthread_create(&tid[i], NULL, consumer_child, (void *)&rng );
范围是一个结构
typedef struct
{
int start;
int end;
} Range;
最佳答案
你需要改变:
pthread_create(&tid[i], NULL, consumer_child, (void *)&rng );
到:
pthread_create(&tid[i], NULL, consumer_child, rng);
因为 rng
已经是一个指针,你想传递它,而不是它的地址。在 C 中,您不需要将对象指针转换为 void *
,除非您有一个需要一个的可变参数函数,并且您正试图向它传递一种不同类型的对象指针。
关于c - 在线程内打印参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29738664/