gpt4 book ai didi

c++ - 检查线程是否是 boost 线程

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:05:43 26 4
gpt4 key购买 nike

出于线程局部清理的目的,我需要创建一个断言来检查当前线程是否是通过 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 中调用它们的清理。一定是其他原因导致它对我不起作用,因为独立测试表明它确实有效。

最佳答案

你的问题的前提是错误的:) boost::thread_specific_ptr 即使线程不是 boost 线程也能工作。想一想 - 主线程的线程特定存储将如何工作,因为它不可能由 boost 创建?我在主线程中很好地使用了 boost::thread_specific_ptr,虽然我没有检查 boost::thread_specific_ptr 的实现,但最明显的实现方式即使对于非 boost 线程也适用。大多数操作系统允许您获得当前线程的唯一 ID 号,然后您可以将其用作映射/数组/哈希表的索引。

更可能的是,您有一个不同的 bug 阻止了您期望看到的行为发生。您应该打开一个单独的问题,其中包含一个可说明意外行为的小型可编译代码示例。

关于c++ - 检查线程是否是 boost 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4786521/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com