ACE:TSS线程私有存储

使用线程私有存储,如果可以将全局或静态变量放入其中,可以降低线程同步间的开销。

传统上,线程专有存储通过令人迷惑的系统API来实现。在ACE中,TSS通过使用ACE_TSS模版类来实现。需要成为线程私有存储的类放入模版中,然后可以使用C++的

->操作符来调用该类的全部公有方法。



#include "ace/Synch.h"
#include "ace/Thread_Manager.h"


class DataType
{
public:
DataType():_data(0){}
void increment(){ _data++; }
void set(int newData){ _data=newData; }
void decrement() { _data--; }
int get() { return _data; }




private:
int _data;
};


ACE_TSS data;


static void* worker1(void*)
{
data->set(10);


ACE_DEBUG((LM_DEBUG,"【%t】 thread the value of date is %d\n",data->get()));
for(int i=0;i<5;i++)
data->increment();


ACE_DEBUG((LM_DEBUG,"【%t】 thread the value of date is %d\n",data->get()));
return 0;


}


static void* worker2(void*)
{
data->set(100);


ACE_DEBUG((LM_DEBUG,"【%t】 thread the value of date is %d\n",data->get()));
for(int i=0;i<5;i++)
data->increment();


ACE_DEBUG((LM_DEBUG,"【%t】 thread the value of date is %d\n",data->get()));
return 0;


}


int main(int argc,char* argv[])
{
ACE_Thread_Manager::instance()->spawn((ACE_THR_FUNC)worker1,0,THR_NEW_LWP|THR_DETACHED);


ACE_Thread_Manager::instance()->spawn((ACE_THR_FUNC)worker2,0,THR_NEW_LWP|THR_DETACHED);


ACE_Thread_Manager::instance()->wait();


ACE_DEBUG((LM_DEBUG,"Both threads done.Exiting..\n"));


return 0;
}

你可能感兴趣的:(ACE)