Возврат результата потока
Возврат результата потока
Выше отмечено, что вызов 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;
Недостатком этого варианта является то, что память под блок данных результата выделяется в одной программной единице (в функции потока), а освобождаться должна в другой (в коде, ожидающем результата), при этом сами программные единицы могут размещаться даже в различных файлах исходного кода. (Здесь ситуация зеркально подобна ранее рассмотренному случаю передачи параметров в функцию создаваемого потока.)
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Элементы буквального результата
Элементы буквального результата Если элемент в теле шаблона не является инструкцией XSL или элементом расширения, процессор XSLT должен рассматривать его в качестве элемента буквального результата. Это означает, что элемент должен трактоваться буквально и копироваться в
Возврат товара
Возврат товара Очень интересный момент, который обязательно надо обговорить. Во всех интернет-магазинах свои правила возврата товара, но российское законодательство все равно прописывает общие правила для всех. Если вы получили товар ненадлежащего качества, то мнения
Возврат товара
Возврат товара Перед тем, как завершить оформление заказа, было бы неплохо прочитать условия возврата. Некоторые магазины пишут, что возврат из-за рубежа невозможен, другие относятся к этому нормально, и вместе с заказом присылают лист возврата, если вы вдруг что-то
7. Программа на месяц до результата
7. Программа на месяц до результата Некий тренинг, который вы ведете лично. Четыре недели подряд обучаете вашего клиента, ведете его за руку до мастерства, задаете домашние задания, проверяете их. Это своего рода коучинговая программа. Возможно, в вашей сфере сработает
ГЛАВА 4. ВОЗВРАТ И ОТСЕЧЕНИЕ
ГЛАВА 4. ВОЗВРАТ И ОТСЕЧЕНИЕ Давайте подытожим всю информацию, которую мы почерпнули в гл. 1 и 2 о том, что может произойти с целевым утверждением (целью).1. Может иметь место попытка доказать согласованность целевого утверждения с базой данных. В процессе доказательства
Урок № 48. Возврат ТМЦ поставщику
Урок № 48. Возврат ТМЦ поставщику Возврат товарно-материальных ценностей поставщику – операция, встречающаяся довольно часто. Кто-то возвращает товары по причине невозможности рассчитаться за них, кто-то – из-за снижения покупательского спроса, кто-то хочет вернуть
7. Когда требуется редактирование результата в fb2-редакторах
7. Когда требуется редактирование результата в fb2-редакторах 1. Когда вы хотите внести в полученный fb2 документ тэги и возможности, пока отсутствующие в конвертере (см. п.1.4.)2. Когда вы конвертировали документ с выключенной опцией «Обработка «проблемных» символов»: amp;, › и
7.4. Возврат значения
7.4. Возврат значения В теле функции может встретиться инструкция return. Она завершает выполнение функции. После этого управление возвращается той функции, из которой была вызвана данная. Инструкция return может употребляться в двух формах:return;return expression;Первая форма
Литеральные элементы результата
Литеральные элементы результата Как мы уже видели из множества примеров, преобразования состоят не только из элементов языка XSLT. Например, в шаблоне<xsl:template match="b"> <В/></xsl:template>элемент B не принадлежит пространству имен XSLT и, следовательно, не считается
4.6.4 Возврат Значения
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; *)Как и
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
История с астрономией, или процесс важнее результата Дмитрий Вибе
История с астрономией, или процесс важнее результата Дмитрий Вибе Опубликовано 01 декабря 2013 После одной из недавних лекций я услышал упрёк, что слишком много внимания уделил истории вопроса, из-за чего у меня меньше времени осталось на описание
Обозначение результата функции
Обозначение результата функции Для понимания текстов функций rho, theta и distance в классе POINT необходимо еще одно соглашение.Любой язык программирования, поддерживающий функции (подпрограммы, возвращающие результат) должен предусматривать нотацию, позволяющую установить в
Присваивание функции результата
Присваивание функции результата Присваивание функции результата является интересной языковой проблемой, обсуждение которой было начато ранее в данной лекции. Стоит изучить ее подробнее ввиду ее важности и для языков, не использующих ОО-подход.Рассмотрим функцию -