boost库实现了一个单例模式,并区分返回的是const & 还是非const &。
如果返回的是const & ,则必然已经是线程安全的。
如果返回的是非 const &,则不是线程安全的,需要自己注意加锁哦。
代码:
#include<iostream>
using namespace std;
#include "boost/serialization/singleton.hpp"
using namespace boost::serialization;
class A
{
public:
A(void){cout<<"A()"<<endl;}
~A(void){cout<<"~A()"<<endl;}
void print(void)const {cout<<"A::print()"<<endl;}
};
class B
{
public:
B(void){cout<<"B()"<<endl;}
~B(void){cout<<"~B()"<<endl;}
void print(void)const
{
singleton<A>::get_mutable_instance().print();//获取非const实例,非线程安全的
}
};
void global_print(void)
{
singleton<A>::get_const_instance().print();//获取const实例,线程安全的
}
int main(int,char**)
{
singleton<A>::get_const_instance().print();//获取const实例,线程安全的
global_print();
B b;
b.print();
return 0;
};
输出:
A()
A::print()
A::print()
B()
A::print()
~B()
~A()
请按任意键继续. . .