2

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++。

4

2 回答 2

5

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

于 2012-10-02T16:16:00.117 回答
0

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

事实上,我相信同时注册的处理程序(因为两个注册都没有在另一个之前排序)也可以同时执行。然而,该标准确实保证注册在另一个之前排序的处理程序将在后者之后执行。

于 2012-09-22T09:41:08.823 回答