pthread_create 的正确论点是什么

What is the correct argument to pthread_create

我看过pthread_create

的文档

在底部的示例中,他们使用的是:

pthread_create(&tinfo[tnum].thread_id, &attr, &thread_start, &tinfo[tnum]);

&thread_start - &

但在我在网上看到的其他示例中,他们没有使用 &:

pthread_create(&tinfo[tnum].thread_id, &attr, thread_start, &tinfo[tnum]);

我也测试过,没有 & 也能正常工作。

但哪种方法才是正确的呢?

简答:都正确。


pthread_create的签名是:

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                      void *(*start_routine) (void *), void *arg);

所以 start_routine 是一个函数指针,它接受一个 void * 参数和 returns void *

回到你的问题,我假设 thread_start 是函数的名称,所以 &thread_start 是一个正确的函数指针。

但是,thread_start也是正确的,因为函数名会自动转换为函数指针。