自定义事务实现 - 线程和锁

时间:2012-03-29 05:54:11

标签: c# multithreading transactions locking thread-safety

我正在使用SQLite做一些事情,我希望线程在我处于“事务”时阻塞。以下代码是否可以正常工作?

public class ThreadSafeSQLiteConnection 
{
    private readonly SQLiteConnection connection;
    public static object TRANSACTION_LOCK = new Object();

    public void BeginTransaction() {
        Monitor.Enter(TRANSACTION_LOCK);
        connection.BeginTransaction();
    }

    public void Commit() {
        connection.Commit();
        Monitor.Exit(TRANSACTION_LOCK);
    }

    public void Rollback() {
        connection.Rollback();
        Monitor.Exit(TRANSACTION_LOCK);
    }
}

如果我在这种情况下打开了一个事务,没有线程可以正确输入BeginTransaction方法吗?

1 个答案:

答案 0 :(得分:3)

是的,以下代码可以正常工作,但在处理多个连接时会出现问题,因为您的locker实例是静态的,因此所有实例都共享。我不明白为什么你会想要一个静态同步的锁定器实例,因为sql事务已经提供了同步。所以:只需从transaction_lock中删除静态部分,你就可以了!