#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);
}
Nach cppreference:Funktioniert "thread_local" für einen nackten Thread?
Das Objekt zugeordnet wird, wenn der Faden beginnt, und freigegeben, wenn der Faden endet. Jeder Thread hat seine eigene Instanz des Objekts. Nur Objekte deklariert
thread_local
haben diese Speicherdauer.
Ich frage mich nur:
Wie funktioniert die C++ Compiler wissen, wann ein nackter Faden (statt std::thread
) erstellt und beendet?
Mit anderen Worten:
Hat der C++ Standardgarantie A::~A()
wird, nachdem die Funktion nackt Thread aufgerufen werden f
fertig ist?
Dies ist aus C++ - Standard Sicht schwer zu beantworten, da der C++ - Standard kein Konzept eines "nackten Threads" wie Sie es verwenden. Aber natürlich werden C++ - Threads plattformspezifisch implementiert, und wenn Sie die gleiche Implementierung direkt programmieren, können Sie wahrscheinlich das gleiche Verhalten erhalten. –