最近用一个网上开源的c++库, 里面多object做引用计数,实现代码为
int count;
addRef(){
count++;
}
relaseRef(){
if (--count ==0){
delete this;
}
}
在多cpu的情况下,这个代码是有问题的,因为++,ii不一定是thread safe的
修改方法:
在x86中用asm的lock解决
可以参考ACE的aotimc_OP和linux中string的实现
int count;
addRef(){
count++;
}
relaseRef(){
if (--count ==0){
delete this;
}
}
在多cpu的情况下,这个代码是有问题的,因为++,ii不一定是thread safe的
修改方法:
在x86中用asm的lock解决
可以参考ACE的aotimc_OP和linux中string的实现

本文讨论了一个C++开源库中使用引用计数管理对象生命周期的问题,并指出其在多CPU环境下存在的线程安全问题。针对该问题,文章提出了在x86架构下使用汇编指令lock来确保原子性的解决方案。
1280

被折叠的 条评论
为什么被折叠?



