基于c++11标准的线程单例类的实现

/最近乱七八糟的事情实在太多了,很多天都没有写博客。今天下午还要出差,头疼。/

  • 在阅读陈硕大佬的muduo库时,其中EventLoop类是要求每个线程单例的,因此自己实现了这个机制,用类似于enable_shared_from_this模板类的方式使用,使代码更整洁。代码见github:

https://github.com/chloro-pn/...

  • 模板类one_object_per_thread的模板参数就是需要实现线程单例的类,实例化后的基类具有:

    1. 一个私有对象 : std::string thread_id_用来记录构造时的线程id
    2. 一个thread_local的静态对象 : T* object_,记录该线程唯一的对象指针。
  • 当构造对象时,如果object_不为空指针,意味着该线程已经有一个该类型的对象,抛出异常。否则object_记录构造的本对象,并记录当前线程id。
  • 线程单例类不允许拷贝和移动。
  • 该模板类提供了三个工具函数:

    1. 一个静态函数 get_object(),获取本线程存储的单例对象。
    2. 一个成员函数 assert_in_create_thread(),通过返回的bool值判断当前函数是否在构造线程中执行。
    3. 一个成员函数 get_create_thread_id()用来获取本对象构造线程的id。
//使用方法:
class YourClass : public one_object_per_thread {
    ...
}

你可能感兴趣的:(c++11,多线程)