Возврат результата потока

Возврат результата потока

Выше отмечено, что вызов pthread_exit(), завершающий ожидаемый поток, может передать результат выполнения потока. То же действие может быть выполнено и оператором return потоковой функции, которая из прототипа ее определения должна возвращать значение типа void*.

В обоих случаях результат может иметь сколь угодно сложный структурированный тип; никакая типизация результата не предусматривается (тип void*). Важно, чтобы код, ожидающий результата на вызове pthread_join(), понимал его так же, как и функция потока, возвращающая этот результат.

Другим условием является то, что переменная «результат» должна существовать к моменту вызова pthread_join(), то есть вполне возможно, что уже далеко после завершения самой функции ожидаемого потока. Этому условию не удовлетворяют, например, любые локальные для функции потока объекты, размещаемые в стеке. Приведем пример часто допускаемой ошибки. Следующая функция потока практически обречена на ошибку защиты памяти:

void* threadfunc(void* data) {

 int res; // результат некоторых вычислений

 res = ...

 pthread_exit(&res);

}

А вот один из многих допустимых вариантов:

void* threadfunc(void* data) {

 struct data *res = new struct; // результат некоторых вычислений

 ...

 *res = ...

 pthread_exit(res);

}

...

pthread_t tid;

pthread_create(&tid, NULL, threadfunc, NULL);

struct data *res;

pthread_join(tid, &res);

...

delete res;

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

4.6.4 Возврат Значения

Из книги C++ автора Хилл Мюррей

4.6.4 Возврат Значения Из функции, которая не описана как void, можно (и долно) возвращать значение. Возвращаемое значение задается опратором return. Например:int fac(int n) (*return (n»1) ? n*fac(n-1) : 1; *)В функции может быть больше одного оператора return: int fac(int n) (* if (n » 1) return n*fac(n-1); else return 1; *)Как и


ГЛАВА 4. ВОЗВРАТ И ОТСЕЧЕНИЕ

Из книги Программирование на языке Пролог автора Клоксин У.

ГЛАВА 4. ВОЗВРАТ И ОТСЕЧЕНИЕ Давайте подытожим всю информацию, которую мы почерпнули в гл. 1 и 2 о том, что может произойти с целевым утверждением (целью).1. Может иметь место попытка доказать согласованность целевого утверждения с базой данных. В процессе доказательства


Обозначение результата функции

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Обозначение результата функции Для понимания текстов функций rho, theta и distance в классе POINT необходимо еще одно соглашение.Любой язык программирования, поддерживающий функции (подпрограммы, возвращающие результат) должен предусматривать нотацию, позволяющую установить в


Присваивание функции результата

Из книги MySQL: руководство профессионала автора Паутов Алексей В

Присваивание функции результата Присваивание функции результата является интересной языковой проблемой, обсуждение которой было начато ранее в данной лекции. Стоит изучить ее подробнее ввиду ее важности и для языков, не использующих ОО-подход.Рассмотрим функцию -


7. Когда требуется редактирование результата в fb2-редакторах

Из книги XSLT автора Хольцнер Стивен

7. Когда требуется редактирование результата в fb2-редакторах 1. Когда вы хотите внести в полученный fb2 документ тэги и возможности, пока отсутствующие в конвертере (см. п.1.4.)2. Когда вы конвертировали документ с выключенной опцией «Обработка «проблемных» символов»: amp;, › и


Элементы буквального результата

Из книги Технология XSLT автора Валиков Алексей Николаевич

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


Литеральные элементы результата

Из книги Интернет-шопинг для неопытных пользователей автора Шестопалова Елена

Литеральные элементы результата Как мы уже видели из множества примеров, преобразования состоят не только из элементов языка XSLT. Например, в шаблоне<xsl:template match="b"> <В/></xsl:template>элемент B не принадлежит пространству имен XSLT и, следовательно, не считается


Возврат товара

Из книги 1С: Бухгалтерия 8 с нуля. 100 уроков для начинающих автора Гладкий Алексей Анатольевич

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


Возврат товара

Из книги Инфобизнес за один день автора Ушанов Азамат

Возврат товара Перед тем, как завершить оформление заказа, было бы неплохо прочитать условия возврата. Некоторые магазины пишут, что возврат из-за рубежа невозможен, другие относятся к этому нормально, и вместе с заказом присылают лист возврата, если вы вдруг что-то


Урок № 48. Возврат ТМЦ поставщику

Из книги Цифровой журнал «Компьютерра» № 201 автора Журнал «Компьютерра»

Урок № 48. Возврат ТМЦ поставщику Возврат товарно-материальных ценностей поставщику – операция, встречающаяся довольно часто. Кто-то возвращает товары по причине невозможности рассчитаться за них, кто-то – из-за снижения покупательского спроса, кто-то хочет вернуть


7. Программа на месяц до результата

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

7. Программа на месяц до результата Некий тренинг, который вы ведете лично. Четыре недели подряд обучаете вашего клиента, ведете его за руку до мастерства, задаете домашние задания, проверяете их. Это своего рода коучинговая программа. Возможно, в вашей сфере сработает


История с астрономией, или процесс важнее результата Дмитрий Вибе

Из книги C++ для начинающих автора Липпман Стенли

История с астрономией, или процесс важнее результата Дмитрий Вибе Опубликовано 01 декабря 2013 После одной из недавних лекций я услышал упрёк, что слишком много внимания уделил истории вопроса, из-за чего у меня меньше времени осталось на описание


12.1.2. Сохранение выходного результата

Из книги автора

12.1.2. Сохранение выходного результата Если нужно сохранить полученные результаты, следует переадресовать их в файл. В приведенном ниже примере выходной результат перенаправляется в файл с именем results.txt. В качестве входного используется файл oops.txt.$ tr -s "[a?z]" < oops.txt >


18.3.5. Проверка результата копирования файла

Из книги автора

18.3.5. Проверка результата копирования файла А теперь осуществим проверку того, успешно ли прошло копирование файла. Если команда cp не скопировала файл myfile в файл myfile.bak, отображается сообщение об ошибке. Обратите внимание, что в сообщении об ошибке фигурирует команда `basename


7.4. Возврат значения

Из книги автора

7.4. Возврат значения В теле функции может встретиться инструкция return. Она завершает выполнение функции. После этого управление возвращается той функции, из которой была вызвана данная. Инструкция return может употребляться в двух формах:return;return expression;Первая форма