修改BOOST(二)
boost提供的thread_specific_ptr用起来很简便。但是TLS的可用索引数量是有限的。特别是在的DLL中,如果第一个进程加载的DLL模块用去了n个索引,第二个进程加载相同模块时可用索引就减少n个,Windows下可用的索引也就一千个左右(我没有去查资料,只是凭记忆写的,如果有错误,可以在下面的讨论中指出,不过大概是这个意思)。不过可以只用一个TLS索引来保存所有的与线程相关的数据。下面是源代码。
1.头文件vtss.hpp
//vtss.hpp。虚拟TSS索引
#ifndef _VTSS_H
#define _VTSS_H
#include <boost/thread/tss.hpp>
namespace boost {
namespace detail {
class vtss
{
public:
vtss(void (*cleanup)(void*)=0);
~vtss();
void* get() const;
bool set(void* value);