为什么我们需要boost :: thread_specific_ptr?

时间:2011-07-08 19:35:22

标签: boost boost-thread

为什么我们需要boost :: thread_specific_ptr,或者换句话说,没有它我们不能轻易做什么?

我可以看到为什么pthread提供了pthread_getspecific()等。这些函数对于在死线程之后进行清理非常有用,并且可以方便地从C风格的函数调用(显而易见的替代方法是将指针传递到指向分配的某些内存的位置)在线程创建之前。)

相比之下,boost:thread的构造函数按值获取一个可调用的类,一旦复制,该类中的所有非静态变为线程本地。我不明白为什么我会想要使用boost :: thread_specific_ptr优先于类成员,而不是在OOP代码中使用全局变量。

我是否会误解任何事情?请给我一个非常简短的例子。非常感谢。

1 个答案:

答案 0 :(得分:2)

thread_specific_ptr只提供便携式线程本地数据访问。您不必使用Boost.Thread管理线程以从中获取值。规范示例是本课程Boost文档中引用的示例:

  

一个例子是C errno变量,   用于存储错误代码   与标准中的功能相关   C库。这是常见的做法(和   对于那些编译器,POSIX所要求的   支持多线程应用程序   提供一个单独的errno实例   为每个线程,以避免   不同的线程竞争阅读或   更新价值。