在非boost线程中使用boost::thread_specific_ptr
Using boost::thread_specific_ptr in a non-boost thread
我正在阅读boost::thread_specific_ptr
的文档部分,并试图解析这段:
注意:在某些平台上,使用平台的本机API创建的线程不会执行特定于线程的数据清理。在这些平台上,这种清理只对以boost::thread启动的线程执行,除非从该线程手动调用boost::on_thread_exit()。
首先,这可能是一个迂腐的观点:我假设他们想说的是boost::this_thread::at_thread_exit()
而不是boost::on_thread_exit()
。否则我真的迷路了。
更重要的是,线程到底需要做什么?向at_thread_exit()传递一些无操作函数是否足够,或者它是否需要传递其他东西?
(这个话题在这里的评论中讨论过,但我仍然不确定我需要做什么。)
(背景故事:我正在寻找解决我今天早些时候提出的问题的方法)。
经过进一步的挖掘,似乎这段神秘的段落确实是指on_thread_exit()
。它引用了一个未记录的函数,该函数不带参数。
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.
因此,我需要做的是编写特定于平台的代码,当任何类型的线程终止时,如果该线程一直在使用boost::thread_specific_ptr
,则触发对该函数的调用。
当线程退出时,它需要销毁线程特定指针的值。在POSIX系统上,这是由创建线程特定键时注册的析构函数完成的,参见http://pubs.opengroup.org/onlinepubs/007904975/functions/pthread_key_create.html,也就是说,该注释不适用于POSIX系统。
这个注释可能是关于Windows的,在Windows中也需要链接到boost::thread
的共享库版本,否则线程特定的指针不会被销毁。
- 无法将参数传递给 boost::thread 构造函数
- 如何使用boost.thread运行多个接收器,每个线程应该分配给每个接收器?
- 使用 boost::thread 运行函子,但析构函数被错误地调用
- thread_specific_pointer可以在哪些平台上工作而无需 boost::thread?
- 将 boost::thread 与 C++11 std::mutex 混合使用是否安全?
- 同时使用 boost.python 和 boost.thread 时出现编译错误
- Boost.thread代码在Ubuntu和Windows中表现出不同的行为
- Pointer to boost::thread
- Linux上多核计算的低性能(openMP、boost::thread等)
- boost - thread.join() halts the ui
- 将基类的引用传递给 boost::thread 并在派生类中调用虚函数是否有效
- Difference between boost::thread and std::thread
- std::thread是boost::thread的替代品吗?
- 将 boost/thread headers 与 clang++ (Windows) 一起使用时出现问题
- 在linux下使用boost::thread创建一个boost::asio工作线程
- 如何在Windows上的CodeBlocks中构建和配置boost.thread
- C++ ReadConsoleInput 不适用于 boost::thread
- Boost.Thread超时等待
- 如何使用boost::thread创建线程池
- 使用std::vector和boost::thread进行内存管理