ACE全局变量 ACE_TSS类

C++全局变量虽然有时候很有用,但也可能带来有害的副作用和不确定的初始化语义,从而产生微妙的问题。在“多线程”应用程序中,这些问题还会加剧。特别是,当多个线程同时访问“未同步的全局变量”时,信息有可能丢失,或者,会使用错误的信息。
操作系统提供的原始TSS C API存在以下问题:
容易出错
不可移植
 
如果在每一个应用程序中都要去处理这些问题,那将十分麻烦,而且容易出错;所以ACE提供了ACE_TSS类。
 
例子:
下面例子中,演示如何将ACE_TSS运用到“一个链接一个线程”中,每一个线程都可以得到“线程专有存储空间”中的请求数(request count).采用这一设计,我们无需互斥体(mutex)就可以消除“请求数”上的“竞态条件(race condition)”。此外,当使用“线程专有存储空间”时,那些“容易出错,不可移植”的原始C API所具有的任何“偶发复杂性”在此也不复存在。
 
首先定义一个简单的类,用来跟踪“请求数”
class Request_Count{
public:
Request_Count():count_(0){}
void increment(){ ++count_; }
int value() const { return count_; }
 
private:
int count_;
};
 
请注意,Request_Count 对“线程专有存储”一无所知。然后,将这个类作用ACE_TSS模板的类型参数:
static ACE_TSS<Request_Count> request_count;
 
现在,每一个线程都各有一个 Request_Count的副本,能通过request_count访问。虽然这个对象在“逻辑上”似乎是“全局”的---也就是说,可以像访问文件范围中任何其他对象一样访问它,但是,它的状态(state)在物理上是“局部”存在于使用它的线程中的。将request_count集成到handle_date()方法中很简单,如下所示:
virtual int handle_date(ACE_SOCK_Stream *){
while (logging_handler_log_record()!=-1)
request_count->intcrement();
ACE_DEBUG((LM_DEBUG,"request_count= %d/n",request_count->value()));
}
在安装过程中,出现了一个错误undefined symbol: PyThread_tss_get [1。这个错误可能是由于编译命令缺少python的参数导致的。在编译命令中,需要加上-D build_python_api=ON和-D PYTHON_EXECUTABLE=/usr/local/python3.6/bin/python3.6这两个参数来指定基于python的动态库 [2。另外,还有一个报错是关于命令行选项“-fno-plt”无法识别的问题 [3。这个问题可能是由于编译命令中缺少了相关的依赖库或者编译选项错误导致的。你可以检查一下编译命令中的参数和依赖库是否正确,并根据错误提示进行相应的修复。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [寒武纪cnstream模型加速的python环境搭建笔记](https://blog.csdn.net/submarineas/article/details/124470740)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [makefile环境不匹配导致的编译错误g++: error: unrecognized command line option ‘-fno-plt](https://blog.csdn.net/zkp_987/article/details/108345887)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值