为了进行线程本地清理,我需要创建一个断言来检查当前线程是否是通过boost::thread创建的。如何检查这一点?也就是说,如何检查当前线程是否由boost::thread处理?
我只需要在线程退出时清理线程本地存储,而Boost的thread_local_ptr似乎只能在线程本身是boost线程的情况下工作。
请注意,我不是在清理时进行检查,而是在线程生命周期中的某个时刻进行检查。某些函数调用我们的API /回调(间接地)导致我分配线程本地存储。只有boost线程可以这样做,因此我需要在那个时刻检测线程是否不是boost线程。
请参考线程本地存储中静态类成员的销毁问题,针对没有通用清理处理程序的问题。我回答了这个问题并意识到pthread_cleanup_push实际上不起作用:它不会在线程的干净退出时被调用。
虽然我没有检测 Boost 线程的答案,但所选答案确实解决了我的问题根源。Boost thread_specific_ptr 可以在任何 pthread 中调用它们的清理函数。因为一个隔离的测试表明它确实有效,所以必须是其他原因导致它不起作用。
我只需要在线程退出时清理线程本地存储,而Boost的thread_local_ptr似乎只能在线程本身是boost线程的情况下工作。
请注意,我不是在清理时进行检查,而是在线程生命周期中的某个时刻进行检查。某些函数调用我们的API /回调(间接地)导致我分配线程本地存储。只有boost线程可以这样做,因此我需要在那个时刻检测线程是否不是boost线程。
请参考线程本地存储中静态类成员的销毁问题,针对没有通用清理处理程序的问题。我回答了这个问题并意识到pthread_cleanup_push实际上不起作用:它不会在线程的干净退出时被调用。
虽然我没有检测 Boost 线程的答案,但所选答案确实解决了我的问题根源。Boost thread_specific_ptr 可以在任何 pthread 中调用它们的清理函数。因为一个隔离的测试表明它确实有效,所以必须是其他原因导致它不起作用。