我正在使用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
方法吗?
答案 0 :(得分:3)
是的,以下代码可以正常工作,但在处理多个连接时会出现问题,因为您的locker实例是静态的,因此所有实例都共享。我不明白为什么你会想要一个静态同步的锁定器实例,因为sql事务已经提供了同步。所以:只需从transaction_lock中删除静态部分,你就可以了!