#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
的对象具有此存储持续时间。
我只是想知道:
C ++编译器如何知道何时创建并退出裸线程(而不是std::thread
)?
换句话说:
裸线程函数A::~A()
完成后是否会调用C ++标准保证f
?
答案 0 :(得分:4)
C ++标准没有说明在您致电pthread_create
时或之后发生的事情。因此,如果您想了解这一点,您必须寻找除C ++标准之外的其他地方。不幸的是,POSIX标准对C ++线程本地对象一无所知。所以POSIX标准也不会说什么。
这意味着,除非特定编译器,平台或线程标准的文档说明特定内容,否则无法保证在某个特定平台上发生的任何事情。