singleton-cpp icon indicating copy to clipboard operation
singleton-cpp copied to clipboard

双重锁

Open WOYAOFEI-1 opened this issue 2 years ago • 3 comments

楼主您好,首先感谢您的代码,不过我有一些问题,在getSharedInstance中使用双重锁的目的是什么呢,尤其是Locks class T那个锁有什么必要性吗,这使我感觉有些困惑。还有就是s_singleTonMutex在什么情况会有线程安全问题呢。

WOYAOFEI-1 avatar Jan 16 '23 12:01 WOYAOFEI-1

因为不加锁的情况下, (*getStaticInstance)() 在多线程代码中,可能调用超过一次。

目前有两个锁,global mutex 和 class T mutex。 只用 global mutex,只要锁住范围包含 (*getStaticInstance)() ,就能解决问题。 但是 (*getStaticInstance)()调用T的构造函数,时间不可控,可能很长。如果用global mutex锁住的话,可能影响其他线程调用其他class的对应(*getStaticInstance)()。

如果解开global mutex不锁柱,就需要用 class T mutex再锁一下。

xhawk18 avatar Jan 17 '23 06:01 xhawk18

小白想问下,重复调用情况会发生死锁吗

wanghuqiang123 avatar Mar 16 '23 01:03 wanghuqiang123

不会死锁。

除非一种特殊情况,就是class A的构造函数里访问class B,class B的构造函数里又访问class A。 这种情况会死锁。但是这种情况本来就是错误的,现实编程也不能这么干。

xhawk18 avatar Apr 02 '23 04:04 xhawk18