C ++ Pthreads.Аргументы для pthread_create - PullRequest
0 голосов
/ 31 октября 2011

Есть несколько вещей, которые я не понимаю в функции 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 сможет сделать с данными неизвестного типа?

Ответы [ 2 ]

3 голосов
/ 31 октября 2011

void *(*start_routine)(void*) следует читать в следующем порядке:

  • start_routine - имя аргумента.
  • *start_routine - поэтому этот аргумент является указателем.
  • (*start_routine)(...) - Ага, это указатель на функцию.
  • (*start_routine)(void*) - Теперь мы знаем аргумент (ы) функции.
  • void *(*start_routine)(void*)- И наконец, это говорит нам о типе возвращаемого значения функции.

Аргумент void* получает все, что передано arg - так что если вам нужно передать какой-либо «ввод» в ваш новыйThread Это один из способов сделать это.

Полученный void* используется в качестве состояния выхода потока (в качестве альтернативы явному вызову pthread_exit()).Вы можете получить этот статус через pthread_join().

1 голос
/ 31 октября 2011
  1. void *(*start_routine)(void*) - указатель на функцию.Все, что связано с этим, является «ключевым синтаксисом», но, в частности, синтаксис (*ptrname)(args).

  2. pthreads ничего не делает с пустотой *, которую возвращает подпрограмма запуска, кроме как вернутьтебе.См. Справочную страницу для pthread_join, чтобы увидеть, как она возвращается к вам.

...