Мне было интересно использовать pthread_key_create
при передаче функции деструктора.
Я хотел что-то вроде этого:
static ComplexObject foo;
void workoncomplex(void *) {
foo.dosomestuff();
}
static pthread_key_t pthreadkey;
void function_called_by_threads() {
pthread_key_create(&pthreadkey, workoncomplex)
}
Очевидно, я пропустил довольно много деталей.
Для любого потока, который не является основным потоком, это, очевидно, хорошо (при условии блокировки и т. Д.), И всякий раз, когда поток умирает, вызывается моя функция workoncomplex
, которая манипулирует объектом foo
.
Мой вопрос: действительно ли это для основного потока, поскольку, очевидно, вызов pthreadkey
деструктора происходит при уменьшении потока, но гарантированно ли он будет запущен до разрушения статики? Если да, должен ли я проверить, нахожусь ли я в главном потоке, и сразу же вернуться? Или я могу просто обработать все потоки одинаково и предположить, что мои статические объекты все еще будут вокруг.