5

我正在阅读文档部分boost::thread_specific_ptr,并尝试解析这一段:

注意:在某些平台上,不会对使用平台的本机 API 创建的线程执行线程特定数据的清理。在那些平台上,此类清理仅针对以 boost::thread 启动的线程进行,除非从该线程手动调用 boost::on_thread_exit()。

首先,这可能是一个迂腐的观点:我认为他们的意思是说boost::this_thread::at_thread_exit()而不是boost::on_thread_exit(). 否则我真的迷路了。

更重要的是,线程到底需要做什么?它是否足以将一些无操作函数传递给 at_thread_exit(),还是需要传递其他东西?

(这个话题在这里的评论中讨论过,但我仍然不确定我需要做什么。)

(背景故事:我正在寻找解决我今天早些时候提出的问题的方法)。

4

2 回答 2

1

经过一番挖掘,似乎那段神秘的段落确实是想说on_thread_exit()。它指的是一个未记录的函数,它不接受任何参数。

这是该函数的声明和随附的注释,来自 boost_1_55_0/boost/thread/detail/tss_hooks.hpp:

BOOST_THREAD_DECL void __cdecl on_thread_exit(void);
    //Function to be called just be fore a thread ends
        //in an exe or dll that uses Boost.Threads.
    //Must be called in the context of the thread
        //that is ending.
    //Called automatically by Boost.Threads when
        //a method for doing so has been discovered.
    //Must not be omitted; may be called multiple times.

所以,iiuc,我需要做的是编写特定于平台的代码,只要任何类型的线程终止,如果该线程一直在使用boost::thread_specific_ptr.

于 2014-03-18T00:21:08.757 回答
0

当一个线程退出时,它需要销毁其线程特定指针的值。在 POSIX 系统上,这是由创建线程特定键时注册的析构函数完成的,请参阅http://pubs.opengroup.org/onlinepubs/007904975/functions/pthread_key_create.html,即该注释不适用于 POSIX 系统.

该评论可能是关于 Windows 的,其中还需要链接到 的共享库版本boost::thread,否则特定于线程的指针不会被破坏。

于 2014-03-17T08:33:42.573 回答