singleton-cpp
singleton-cpp copied to clipboard
双重锁
楼主您好,首先感谢您的代码,不过我有一些问题,在getSharedInstance中使用双重锁的目的是什么呢,尤其是Locks class T那个锁有什么必要性吗,这使我感觉有些困惑。还有就是s_singleTonMutex在什么情况会有线程安全问题呢。
因为不加锁的情况下, (*getStaticInstance)() 在多线程代码中,可能调用超过一次。
目前有两个锁,global mutex 和 class T mutex。 只用 global mutex,只要锁住范围包含 (*getStaticInstance)() ,就能解决问题。 但是 (*getStaticInstance)()调用T的构造函数,时间不可控,可能很长。如果用global mutex锁住的话,可能影响其他线程调用其他class的对应(*getStaticInstance)()。
如果解开global mutex不锁柱,就需要用 class T mutex再锁一下。
小白想问下,重复调用情况会发生死锁吗
不会死锁。
除非一种特殊情况,就是class A的构造函数里访问class B,class B的构造函数里又访问class A。 这种情况会死锁。但是这种情况本来就是错误的,现实编程也不能这么干。