0
有一個叫做「pTrackerArray」的全局變量,它用在Loki的SetLongevity函數中。Loki的SetLongevity函數對我來說似乎不安全,是嗎?
pTrackerArray宣言:
typedef std::list<LifetimeTracker*> TrackerArray;
extern LOKI_EXPORT TrackerArray* pTrackerArray;
SetLongevity的定義:
template <typename T, typename Destroyer>
void SetLongevity(T* pDynObject, unsigned int longevity, Destroyer d)
{
using namespace Private;
// manage lifetime of stack manually
if(pTrackerArray==0)
pTrackerArray = new TrackerArray;
// For simplicity, the rest of code is omitted
...
}
是線程安全的SetLongevity使用pTrackerArray這樣?
感謝您的回答。但我認爲它只適合你的描述,只要我們在多個線程中使用相同的Singleton :: Instance方法即可。當我們有幾個單例類並且每個類中的Instance()方法在不同的線程中運行時呢?當他們到達SetLongevity時,它在那裏還是安全的? – Rong
嗯,你說得對,我沒有仔細看過最後一個功能。除非我錯過了某些東西,否則它確實看起來只能保護給定的單身人士。 –