不同线程中的多个atexit处理程序

时间:2012-09-22 09:20:55

标签: c++ gcc g++

我对在多线程应用程序中使用atexit表示怀疑。

假设我有以下情况

 Thread A calls atexit(handler_a)
 Thread B calls atexit(handler_b)
 main()   calls atexit(handler_main)
 Thread C calls atexit(handler_c)
 ....

是在一个唯一线程中执行的所有处理函数还是在单独的线程中执行?

如果它们确实在一个线程中执行(一个接一个),那么该线程将成为主线程吗?

我正在使用Linux和g ++。

2 个答案:

答案 0 :(得分:5)

正如rici所说,atexit处理程序是从调用exit的线程调用的。如果你想要每个线程处理程序,你可以使用pthread_key_create析构函数。

答案 1 :(得分:0)

我没有在标准中看到任何需要从单个线程调用atexit个处理程序的约束。

事实上,我认为同时注册的处理程序(如同在两个注册之前都没有按顺序排序)也可以同时执行。但是,该标准确保了在另一个之后执行其注册顺序的处理程序将在后者之后执行。