【问题标题】:C++ Pthreads. Arguments to pthread_createC++ Pthreads。 pthread_create 的参数
【发布时间】:2011-12-18 10:07:09
【问题描述】:

关于函数pthread_create,我有一些不明白的地方。

这是标题

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

首先,我不熟悉void *(*start_routine)(void*), 的语法。我知道这里要求的参数是返回void * 的函数的名称,并将void * 作为其参数。大概pthread_create 将该函数称为start_routine。所以我想这个参数将是一个函数指针?如果是,那么关键的语法元素是什么?

其次,为什么pthread_create 期望一个以void * 作为返回类型的函数? pthread_create 能用未知类型的数据做什么?

【问题讨论】:

    标签: c++ pthreads function-pointers void-pointers


    【解决方案1】:
    1. void *(*start_routine)(void*) 是一个函数指针。关于它的一切都是“关键语法”,尤其是语法(*ptrname)(args)。

    2. pthreads 不会对启动例程返回的 void* 做任何事情,只是将它返回给您。请参阅 pthread_join 的手册页,了解它是如何返回给您的。

    【讨论】:

      【解决方案2】:

      void *(*start_routine)(void*) 应按以下顺序阅读:

      • start_routine - 参数名称。
      • *start_routine - 所以这个参数是一个指针。
      • (*start_routine)(...) - 啊哈,这是一个指向函数的指针。
      • (*start_routine)(void*) - 我们现在知道函数的参数了。
      • void *(*start_routine)(void*) - 最后,这告诉我们函数的返回类型。

      void* 参数接收传递给 arg 的任何内容 - 因此,如果您需要将任何“输入”传递给新线程,这是一种方法。

      生成的void* 用作线程的退出状态(作为显式调用pthread_exit() 的替代方法)。您可以通过pthread_join()获取此状态。

      【讨论】:

        猜你喜欢
        • 2013-07-10
        • 1970-01-01
        • 2015-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多