Write a thread-safe Singleton
๐ก Concept: Thread-Safe Singleton
A thread-safe Singleton ensures only one instance is created even when accessed concurrently across multiple threads.
๐ Quick Intro
Thread safety is critical in multi-threaded environments to prevent multiple instantiations.
๐ง Analogy
Like a single cashier opening only one register at a busy store to avoid confusion.
๐ง Technical Explanation
- Use locking mechanisms (e.g., lock keyword) to synchronize access.
- Double-checked locking optimizes performance.
- Lazy<T> provides built-in thread safety.
- Ensures consistent state across threads.
- Avoids race conditions during instance creation.
๐ฏ Use Cases
- โ Logging services.
- โ Configuration managers.
- โ Shared caches.
- โ Resource managers in multi-threaded apps.
๐ป Code Example
// Thread-safe singleton with double-checked locking
public sealed class ThreadSafeSingleton {
private static ThreadSafeSingleton? instance = null;
private static readonly object padlock = new object();
private ThreadSafeSingleton() { }
public static ThreadSafeSingleton Instance {
get {
if (instance == null) {
lock (padlock) {
if (instance == null) {
instance = new ThreadSafeSingleton();
}
}
}
return instance;
}
}
public void DoWork() {
Console.WriteLine(""Thread-safe singleton action."");
}
}

โ Interview Q&A
Q1: Why is thread safety important in Singleton?
A: To avoid multiple instances in concurrent environments.
Q2: What is double-checked locking?
A: A technique to reduce locking overhead.
Q3: Can Lazy<T> be used?
A: Yes, it's simpler and thread-safe.
Q4: What problems does thread safety solve?
A: Race conditions and inconsistent states.
Q5: Is locking expensive?
A: Slightly, which is why double-check is used.
Q6: Can singleton be broken?
A: Through reflection or serialization.
Q7: Is sealed class necessary?
A: Recommended to prevent inheritance.
Q8: What alternatives exist?
A: Dependency injection.
Q9: How to test singleton?
A: Use unit tests with mocks.
Q10: Does thread safety affect performance?
A: Minor overhead but necessary.
๐ MCQs
Q1. Why is thread safety important in Singleton?
- No importance
- Avoid multiple instances
- Speed
- Memory
Q2. What is double-checked locking?
- Always lock
- Reduce locking overhead
- Ignore locks
- Use multiple locks
Q3. Can Lazy<T> be used?
- No
- Yes
- Maybe
- Sometimes
Q4. What problems does thread safety solve?
- Deadlocks
- Race conditions
- Memory leaks
- Slow code
Q5. Is locking expensive?
- No
- Yes
- Sometimes
- Never
Q6. Can singleton be broken?
- No
- Yes
- Reflection and serialization
- Inheritance
Q7. Is sealed class necessary?
- No
- Yes
- Optional
- Not needed
Q8. What alternatives exist?
- Factory
- Strategy
- Dependency injection
- Observer
Q9. How to test singleton?
- Integration tests
- Unit tests
- No tests
- Manual tests
Q10. Does thread safety affect performance?
- Major overhead
- Minor overhead
- No overhead
- Significant slowdown
๐ก Bonus Insight
Thread-safe Singleton implementations are vital in modern multi-threaded applications.
๐ PDF Download
Need a handy summary for your notes? Download this topic as a PDF!