为什么我们需要boost :: thread_specific_ptr,或者换句话说,没有它我们不能轻易做什么?
我可以看到为什么pthread提供了pthread_getspecific()等。这些函数对于在死线程之后进行清理非常有用,并且可以方便地从C风格的函数调用(显而易见的替代方法是将指针传递到指向分配的某些内存的位置)在线程创建之前。)
相比之下,boost:thread的构造函数按值获取一个可调用的类,一旦复制,该类中的所有非静态变为线程本地。我不明白为什么我会想要使用boost :: thread_specific_ptr优先于类成员,而不是在OOP代码中使用全局变量。
我是否会误解任何事情?请给我一个非常简短的例子。非常感谢。
答案 0 :(得分:2)
thread_specific_ptr
只提供便携式线程本地数据访问。您不必使用Boost.Thread管理线程以从中获取值。规范示例是本课程Boost文档中引用的示例:
一个例子是C errno变量, 用于存储错误代码 与标准中的功能相关 C库。这是常见的做法(和 对于那些编译器,POSIX所要求的 支持多线程应用程序 提供一个单独的errno实例 为每个线程,以避免 不同的线程竞争阅读或 更新价值。