Ich mache einige Sachen mit SQLite, und ich möchte, dass Threads blockieren, während ich in einer "Transaktion" bin. Funktioniert der folgende Code korrekt?Benutzerdefinierte Transaktionsimplementierung - Threading und Sperren
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);
}
}
Wenn ich eine Transaktion offen in diesem Fall, können keine Threads BeginTransaction
Methode korrekt eingeben?
@Groo - verzeih mir, dass ich kein sql lite-Experte bin :) aber ist die SqlLite-Transaktion dort nicht zum Schutz vor race-Bedingungen, wenn gleichzeitige Verbindungen versuchen zu schreiben? – Polity
Entschuldigung, ich habe das nicht durchdacht. Ja, SQLite ist Thread-sicher zum Schreiben. Ich würde jedoch den 'TRANSACTION_LOCK' auf jeden Fall privat machen. – Groo