在底部的示例中,他们使用:
pthread_create(&tinfo[tnum].thread_id, &attr, &thread_start, &tinfo[tnum]);
&thread_start
- &
但在其他示例中,我在网上看到他们没有使用&
:
pthread_create(&tinfo[tnum].thread_id, &attr, thread_start, &tinfo[tnum]);
我也进行了测试,但没有&
。
但这是正确的方法吗?
答案 0 :(得分:3)
简短回答:两者都是正确的。
pthread_create
的签名是:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
所以start_routine
是一个函数指针,它接受void *
参数并返回void *
。
回到你的问题,我假设thread_start
是函数的名称,所以&thread_start
是一个正确的函数指针。
但是,thread_start
也是正确的,因为函数名称会自动转换为函数指针。