c - 在线程内打印参数

标签 c multithreading

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/

相关文章:

c++ - std::mutex::lock 在 Windows 上失败,错误代码 3

使用数据结构的 C 程序部分的复杂性和解释

c - C中的指针操作

c++ - 每个线程或每个调用一个 ZeroMQ 套接字?

android - 工作线程上的 PubNub

java - 如果两个线程连接在一起并且其中一个由于某种原因中止,会发生什么

c - 使用 mbedlts 在内存受限的系统上使用 SHA 散列文件

C 中的命令行参数和 ftruncate

c - 在数组 : Segmentation fault (core dumped) 中插入一个元素

c# - 使用 Dispose() 或终结器来清理托管线程?