андроид — c ++ thread_local деструкторы с деструкторами pthread

Я хочу сделать некоторую работу после всех вызванных деструкторов C ++ thread_local.
Это зависит от платформы — Android, поэтому у меня есть доступ к pthreads,

Вопрос в том, когда pthread_key_createДолжны быть вызваны деструкторы, до или после C ++ thread_local деструкторов? Или их можно чередовать?

Я тестировал на Linux Mint и pthread деструкторы, названные в честь C ++.

0

Решение

бионический / pthread_exit.cpp в настоящее время имеет тот же порядок:

void pthread_exit(void* return_value) {
// Call dtors for thread_local objects first.
__cxa_thread_finalize();
// Call the TLS destructors.
pthread_key_clean_all();

Тем не менее, это не задокументированное поведение, и вы не должны строить что-то, опираясь на это.

1

Другие решения

libstdc++ из GCC использует pthread_key_create если платформа не обеспечивает __cxa_thread_atexit_impl, В этом случае деструкторы C ++ выполняются где-то посередине деструкторов POSIX.

Насколько мне известно, нет стандарта, который требует какого-либо особого поведения здесь, потому что C ++ не знает о POSIX, а POSIX не знает о C ++, поэтому ни один из стандартов не говорит о том, что здесь происходит. Есть также несколько ключевых случаев, связанных с воскрешением локальных данных потока во время уничтожения потока, которые могут отличаться в разных реализациях. (Типичным примером является объект журнала для каждого потока, который используется для регистрации из деструкторов локальных переменных потока.)

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector