我正在使用 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
方法,正确吗?
最佳答案
是的,以下代码可以工作,但在使用多个连接时会出现错误,因为您的储物柜实例是静态的,因此由所有实例共享。我不明白为什么你想要一个静态同步的锁实例,因为 sql 事务已经提供了同步。所以:只需从 transaction_lock 中删除静态部分就可以了!
关于c# - 自定义事务实现 - 线程和锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9919789/