#include <pthread.h>
#include <thread>
#include <iostream>
using namespace std;
struct A
{
~A()
{
cout << "~A()" << endl;
}
};
void* f(void*)
{
thread_local A a;
return 0;
}
int main()
{
pthread_t tid;
pthread_create(&tid, nullptr, f, nullptr);
this_thread::sleep_for(5min);
}
В соответствии с cppreference:Работает ли «thread_local» для голой нити?
Объект выделяется, когда начинается нить и высвобождены, когда нить заканчивается. Каждый поток имеет свой собственный экземпляр объекта. Только объектов, объявленных
thread_local
, имеют срок хранения.
мне просто интересно:
Как работает C++ компилятор знает, когда голая нить (, а не std::thread
) создана и вышла?
Других слова:
ли будет называться C++ стандартной гарантии A::~A()
после обнаженной функции потока f
закончена?
Это трудно ответить с точки зрения C++, поскольку стандарт C++ не имеет понятия «голый поток», как вы его используете. Но, конечно же, потоки C++ будут реализованы с определенной платформой, и если вам удастся напрямую выполнить такую же реализацию, вы, возможно, получите то же самое. –