手动清理boost :: thread中特定于线程的资源

时间:2012-11-10 02:25:58

标签: c++ multithreading boost c++-cli thread-local-storage

boost thread静态库不能与C ++ / CLI代码一起使用,因为它使用线程本地存储回调来清理特定于线程的数据。可以通过在构建boost库时排除tss_pe.obj来禁用这些回调,这样可以在托管代码中使用库,但这意味着需要手动清理这些资源。

这些都没有正式记录,但我已经从这个手动清理所需的各种错误/论坛帖子(例如https://svn.boost.org/trac/boost/ticket/1848)拼凑而成:

  • 在退出“不受boost :: thread管理”的线程时调用on_thread_exit()。我不清楚这究竟是什么意思,或者为什么Boost线程会负责清理它没有管理的线程的资源。
  • 也可能在main(http://lists.boost.org/Archives/boost/2007/11/130440.php)的开头和结尾调用on_process_enter和on_process_exit。

作为以前没有使用线程本地存储的库的新用户,我想确保我完全理解这些简洁的指南。我将在COM DLL中使用来自非托管代码的boost线程,该DLL也包含几个托管类。

有人可以通过示例提供更详细的解释,说明我需要调用上述函数的确切情况,以避免在禁用自动清理时泄漏资源吗?

0 个答案:

没有答案
相关问题