【发布时间】:2011-01-24 19:59:56
【问题描述】:
出于线程本地清理的目的,我需要创建一个断言来检查当前线程是否是通过 boost::thread 创建的。我怎样才能检查是否是这种情况?即如何检查当前线程是否被 boost::thread 处理?
我只需要在线程退出时清理线程本地存储。 Boost 的 thread_local_ptr 似乎仅在线程本身是 boost 线程时才有效。
请注意,我不是在清理时进行检查,而是在线程生命周期的某个时候进行。某些函数调用我们的 API/回调之一(间接)导致我分配线程本地存储。只允许 boost 线程执行此操作,因此我需要在那个时候检测该线程是否不是 boost 线程。
有关没有通用清理处理程序的问题,请参阅Destruction of static class members in Thread local storage。我回答了这个问题并意识到 pthread_clenaup_push 实际上不起作用:它不会在线程的干净退出时调用。
虽然我没有检测到 boost 线程的答案,但选择的答案确实解决了我的问题的根源。 Boost thread_specific_ptr 将在任何 pthread 中调用它们的清理。一定是其他原因导致它对我不起作用,因为单独的测试表明它确实有效。
【问题讨论】:
-
我不认为你真的想要一个 static 断言。在编译时检查静态断言,但要检查运行时是如何创建的还为时过早。我想你只想要一个普通的断言。
-
我更正了静态断言。