Контракт для xpc_main , который внутренне вызывает dispatch_main , эта функция никогда не возвращается. , и они соответствующим образом усыпаны __attribute __ ((__ Noreturn __)) . В документации говорится:
Эта функция «парки» основной поток и ожидание блоков, которые будут отправлены в основную очередь. Документация pthread_exit < /code> гласит, что: < /p>
после завершения потока, результат доступа к локальным (Auto)
переменные потока не определен. Таким образом, ссылки на локальные
переменные выходящего потока не должны использоваться для
Код: Выделить всё
pthread_exit()Я бы сказал, что два контракта этой функции никогда не возвращаются. и поток, выходящие с его хранилищами, диаметрально противоположны и могут создавать нюансы.
Код: Выделить всё
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 ++, который создается в стеке и выставляет одного из его членов как глобальный указатель, с предположением, что он никогда не выпустит. То, что я понимаю из этой функции, никогда не возвращает спасибо
Подробнее здесь: https://stackoverflow.com/questions/797 ... read-stack
Мобильная версия