C++ C++;Pthreads。pthread_create的参数

C++ C++;Pthreads。pthread_create的参数,c++,pthreads,function-pointers,void-pointers,C++,Pthreads,Function Pointers,Void Pointers,关于函数pthread\u create,有几点我不了解 这是标题 int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void*), void *restrict arg); 首先,我不熟悉void*(*start\u

关于函数
pthread\u create
,有几点我不了解

这是标题

int pthread_create(pthread_t *restrict thread,
                   const pthread_attr_t *restrict attr,
                   void *(*start_routine)(void*), 
                   void *restrict arg);
首先,我不熟悉
void*(*start\u routine)(void*),
的语法。我知道这里要求的参数是返回
void*
的函数名,并将一个
void*
作为其参数。大概
pthread\u create
会将该函数称为
start\u例程
。我想这个参数应该是一个函数指针?如果是这样的话,是什么关键语法元素使其如此

其次,为什么
pthread\u创建的
期望函数的返回类型为
void*
pthread\u create
能够对未知类型的数据做什么

  • void*(*start\u例程)(void*)
    是一个函数指针。关于它的一切都是“关键语法”,但特别是语法
    (*ptrname)(args)

  • pthreads不会对start例程返回的void*执行任何操作,只会将其返回给您。查看
    pthread\u join
    的手册页,了解它是如何返回给您的

  • void*(*start\u例程)(void*)
    是一个函数指针。关于它的一切都是“关键语法”,但特别是语法
    (*ptrname)(args)

  • pthreads不会对start例程返回的void*执行任何操作,只会将其返回给您。查看
    pthread\u join
    的手册页,了解它是如何返回给您的

  • 应按以下顺序读取
    void*(*start_例程)(void*)

    • start\u例程
      -参数的名称
    • *start_例程
      -所以这个参数是一个指针
    • (*start_例程)(…)
      -啊哈,这是指向函数的指针
    • (*start_例程)(void*)
      -我们现在知道函数的参数
    • void*(*start\u例程)(void*)
      -最后,这告诉我们函数的返回类型
    void*
    参数接收传递给
    arg
    的任何内容-因此,如果需要将任何“输入”传递给新线程,这是一种方法

    生成的
    void*
    用作线程的退出状态(作为显式调用
    pthread\u exit()
    的替代方法)。您可以通过
    pthread\u join()

    获取此状态。应按以下顺序读取
    void*(*start\u例程)(void*)

    • start\u例程
      -参数的名称
    • *start_例程
      -所以这个参数是一个指针
    • (*start_例程)(…)
      -啊哈,这是指向函数的指针
    • (*start_例程)(void*)
      -我们现在知道函数的参数
    • void*(*start\u例程)(void*)
      -最后,这告诉我们函数的返回类型
    void*
    参数接收传递给
    arg
    的任何内容-因此,如果需要将任何“输入”传递给新线程,这是一种方法

    生成的
    void*
    用作线程的退出状态(作为显式调用
    pthread\u exit()
    的替代方法)。您可以通过
    pthread\u join()
    获得此状态