我有一個有3個靜態成員的類。每個靜態成員不是線程安全的單例。 我需要爲它們的使用提供一個線程安全的實現。它可以嗎?或者我需要爲它們中的每一個提供線程安全的包裝?如果我應該 - 我如何使用Lazy<T>
做到這一點?線程安全singelton
附加問題:Measure()
和Do()
of SingeltonClass1/2/3
不是線程安全的func1()
線程安全嗎?
public class MyLazySingleton
{
// static holder for instance, need to use lambda to construct since constructor private
private static readonly Lazy<MyLazySingleton> _instance
= new Lazy<MyLazySingleton>(() => new MyLazySingleton());
// private to prevent direct instantiation.
private MyLazySingleton()
{
s_c1 = SingletonClass1.Instance();
s_c2 = SingletonClass2.Instance();
s_c3 = SingletonClass3.Instance();
}
// accessor for instance
public static MyLazySingletonInstance
{
get
{
return _instance.Value;
}
}
public void func1()
{
if (s_s1.Measure() || s_c2.Measure())
{
c_c3.Do();
}
}
static SingletonClass1 s_c1 = null;
static SingletonClass1 s_c2 = null;
static SingletonClass1 s_c3 = null;
}
如何重新實現MyLazySingleton如果它的構造函數應該得到2個參數? string str
和int i
我曾問一個跟進的問題Thread-safe methods in the singleton class
我編輯了我的答案,包括您的額外編輯/問題。如果您還有其他問題,可能有新的針對性問題。 –
我沒有注意到您編輯的底部的第三個問題。您打算如何提供這些參數會影響答案。我建議你創建一個新的問題_specifically_關於這一點。 (是參數編譯時常量嗎?你會更新你的'MyLazySingletonInstance'來傳遞它們嗎?用戶會以某種方式指定它們嗎?等等) –