ThreadLocal
1 构造函数和析构函数的实现
ThreadLocal()函数的实现
ThreadLocal()
{
//第二个参数是pkey销毁的时候,调用的清理函数
MCHECK(pthread_key_create(&pkey_, &ThreadLocal::destructor));
}
** ~ThreadLocal()函数的实现**
~ThreadLocal()
{
//销毁pthread_key_t变量
MCHECK(pthread_key_delete(pkey_));
}
2 成员函数的实现
** T& value()函数的实现**
T& value()
{
//获得线程特有变量
T* perThreadValue = static_cast<T*>(pthread_getspecific(pkey_));
//如果线程特有变量为空,则设置线程特有变量,否则直接返回线程特有变量
if (!perThreadValue)
{
T* newObj = new T();
//为线程设置特有数据
MCHECK(pthread_setspecific(pkey_, newObj));
perThreadValue = newObj;
}
return *perThreadValue;
}
*static void destructor(void x)函数的实现
private:
static void destructor(void *x)
{
T* obj = static_cast<T*>(x);
typedef char T_must_be_complete_type[sizeof(T) == 0 ? -1 : 1];
T_must_be_complete_type dummy; (void) dummy;
//删除实例化的变量
delete obj;
}