c# - 多种方法的线程同步

标签 c# multithreading

我有一个包含多个静态方法的静态类。

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/

相关文章:

c# - 使用 Linq 的对象总和列表

c# - 正则表达式围绕大括号拆分

python - 处理多个套接字连接的最佳方法是什么

C# Action /函数列表

c# - 什么更快 : web service or XML server output?

java - 应用运行在多节点时,如何实现数据库更新的同步?

Java Web 应用程序线程在 java.net.SocketInputStream.socketRead0( native 方法)中因数据库操作而卡住

c - 使用 POSIX QUEUE 完成后该怎么做

java - 停止正在运行的线程

c# - 电话号码的正则表达式掩码替换模式