#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);
}
Selon cppreference:Est-ce que "thread_local" fonctionne pour un thread nu?
L'objet est attribué lorsque le fil commence et quand désallouée la fin de fil. Chaque thread a sa propre instance de l'objet. Seuls les objets déclarés
thread_local
ont cette durée de stockage.
Je me demande:
Comment le compilateur C++ savoir quand un fil nu (plutôt que std::thread
) est créé et est sorti?
En d'autres termes:
Est-ce que la garantie C standard de A::~A()
sera appelée après la fonction de fil nu f
est terminé?
Il est difficile de répondre d'un point de vue standard C++, puisque la norme C++ n'a pas le concept de "fil nu" comme vous l'utilisez. Mais bien sûr, les threads C++ seront implémentés de manière spécifique à la plate-forme, et s'il vous arrive de coder directement cette même implémentation, vous risquez d'obtenir le même comportement. –