我有一个包含多个静态方法的静态类。
private static Session _session = new Session();
public static void Method1() {
if(_session != null)
_session.Action();
}
public static void Method2() {
if(_session != null)
_session.Action();
}
public static void Method3() {
if(_session != null)
_session.Action();
}
public static void Method4(string path) {
_session.Disconnect();
_session.Connect(new Config(path));
}
Method1、Method2、Method3 是完全线程安全的,可以从任意数量的线程同时安全地调用它们。事实上,出于性能原因,我需要允许多个线程并发调用 Method1,2,3。
问题是,当调用 Method4() 时,Method1、2、3 可能抛出异常。 如何允许多个线程调用 Method1、2、3,同时在调用 Method4() 时阻止它们?
最佳答案
正如 SLaks 所指出的,ReadWriterLock 是一个很好的解决方案。
这是我最终实现的:
private static ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();
private static Session _session = new Session();
public static void Method1() {
_lock.EnterReadLock();
try {
if(_session != null)
_session.Action();
}
finally
{
_lock.ExitReadLock();
}
}
public static void Method2() {
_lock.EnterReadLock();
try {
if(_session != null)
_session.Action();
}
finally
{
_lock.ExitReadLock();
}
}
public static void Method3() {
_lock.EnterReadLock();
try {
if(_session != null)
_session.Action();
}
finally
{
_lock.ExitReadLock();
}
}
public static void Method4(string path) {
_lock.EnterWriteLock();
try {
if(_session != null)
_session.Action();
}
finally
{
_lock.ExitWriteLock();
}
}
出色的性能,没有线程问题!
关于c# - 多种方法的线程同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21561666/