在非boost程序中使用boost :: thread_specific_ptr

sly*_*lin 5 c++ multithreading boost boost-thread thread-local-storage

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

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

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

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

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

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

sly*_*lin 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.
Run Code Online (Sandbox Code Playgroud)

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