Dispatch_main и основной стек потоковC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Dispatch_main и основной стек потоков

Сообщение Anonymous »

Мы видим некоторые странные сбои и заметили следующие. Неясно, связано ли или нет.
Контракт для xpc_main , который внутренне вызывает dispatch_main , эта функция никогда не возвращается. , и они соответствующим образом усыпаны __attribute __ ((__ Noreturn __)) . В документации говорится:

Эта функция «парки» основной поток и ожидание блоков, которые будут отправлены в основную очередь. Документация pthread_exit < /code> гласит, что: < /p>

после завершения потока, результат доступа к локальным (Auto)
переменные потока не определен. Таким образом, ссылки на локальные
переменные выходящего потока не должны использоваться для

Код: Выделить всё

pthread_exit()
value_ptr Значение параметра.

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

Код: Выделить всё

struct asd {
int a;
};

struct asd* ptr;

void fff(void* ctx)
{
while(true)
{
printf("%d\n", ptr->a);
ptr->a = (ptr->a + 1);
usleep(100000);
}
}

int main(int argc, const char * argv[]) {
struct asd zxc;
zxc.a = 1;
ptr = &zxc;

dispatch_async_f(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), NULL, fff);

dispatch_main();

return 0;
}
< /code>
Это грубое чрезмерное упрощение кода, которое у нас есть, но в том же «духе». У нас есть объект C ++, который создается в стеке и выставляет одного из его членов как глобальный указатель, с предположением, что он никогда не выпустит. То, что я понимаю из этой функции, никогда не возвращает 
, так это то, что призывник остается бездействующим, а его стек остается живым. Что я понимаю из pthread_exit , так это то, что поток убит (это подтверждается прикрепленным отладчиком) и его хранилище стека. Я не вижу никакой специальной обработки внутренней Pthread_t в libdispatch, чтобы сохранить хранилище стека. Но все же я хотел бы понять, если это ожидаемое поведение. Возможно, мое предварительное представление о __attribute __ ((__ nereturn __))) является неправильным, и доступ к переменным стека Post Call в __attribute __ ((__ noreturn __)) функция ub?
спасибо

Подробнее здесь: https://stackoverflow.com/questions/797 ... read-stack
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»