В чем разница между функцией ввода потока и нормальной функцией? - PullRequest
1 голос
/ 13 сентября 2011

Хотелось бы узнать разницу между функцией ввода потока:

void* thread_function (void* parameter)
{
   struct parameter * thread_data = (struct parameter *)parameter;
   char buffer[20];
   int temp;
   printf_buffer(buffer);
}

и нормальная функция:

void printf_buffer(char *buffer)
{
    printf("buffer is %s",buffer);
    return;
}

Я знаю, что запись потока вызывается при создании потока и как используются нормальные функции.

Существуют ли какие-либо другие различия между функциями входа в поток и обычными функциями с точки зрения выполнения, поведения или создания экземпляров?

Ответы [ 3 ]

4 голосов
/ 13 сентября 2011

Нет никакой разницы в языке между тем, что вы называете «функцией потока» (хотя Джастин отредактировал так, чтобы называть это «функцией входа потока»), и тем, что вы называете «нормальной функцией».

В pthreads так называемая «процедура запуска» потока - это функция, которая принимает один параметр void* и возвращает void*, но ничто не мешает вам вызывать ту же функцию «нормально».

Когда процедура запуска потока возвращается, поток завершает выполнение, но это только потому, что реализация потока вызывает его, а затем завершает поток.Это не из-за чего-то особенного, связанного с самой процедурой запуска.

1 голос
/ 13 сентября 2011

man pthread_create определяет это довольно хорошо:

http://linux.die.net/man/3/pthread_create

Одно существенное отличие, которое еще не было упомянуто, состоит в том, что запись потока должна ожидать, что она будет работать со стеком, отличным от стека вызывающей стороны. по этой причине вам часто нужно передавать кучи копий ресурсов в качестве аргумента при отсоединении потока, а затем освобождать его в записи:

// the caller must pass a heap copy of struct parameter* arg
void* detached_entry(void* arg) {

  struct parameter* parameter = (struct parameter*)arg;
  ...
  free(parameter);
}
1 голос
/ 13 сентября 2011

Функция потока - это просто точка входа / выхода потока.Выполнение этой функции ничем не отличается от того, что вы называете нормальной функцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...