pthread_create 的正确论点是什么
What is the correct argument to 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
也是正确的,因为函数名会自动转换为函数指针。
在底部的示例中,他们使用的是:
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
也是正确的,因为函数名会自动转换为函数指针。