Multithreading 在多线程环境中使用sqlite

Multithreading 在多线程环境中使用sqlite,multithreading,sqlite,transactions,Multithreading,Sqlite,Transactions,我一直试图对SQLite文档中的多线程技术了如指掌,但仍然没有完全理解。假设我有两个线程从/到DB读写。我的write由多个sql语句组成,因此我需要将它们包装在显式事务中,类似这样: sqlite3_exec (myDb, "BEGIN TRANSACTION", 0, 0, 0); // write stuff here sqlite3_exec (myDb, "COMMIT TRANSACTION", 0, 0, 0); 第一个问题:我需要在事务中进行换行读取操作吗?我的主要要求是,在写

我一直试图对SQLite文档中的多线程技术了如指掌,但仍然没有完全理解。假设我有两个线程从/到DB读写。我的write由多个sql语句组成,因此我需要将它们包装在显式事务中,类似这样:

sqlite3_exec (myDb, "BEGIN TRANSACTION", 0, 0, 0);
// write stuff here
sqlite3_exec (myDb, "COMMIT TRANSACTION", 0, 0, 0);
第一个问题:我需要在事务中进行换行读取操作吗?我的主要要求是,在写事务完成之前,不可能读取半写数据

第二:我可以在两个线程中使用一个数据库连接吗看起来我不能这样做,因为如果两个线程都在向DB写入数据,那么两个打开的事务第二个“BEGINTRANSACTION”语句将失败

那么,这里的正确方法是什么:使用自己的锁定机制?每个线程使用一个连接?-在这种情况下会发生什么,我应该担心SQL\u BUSY/SQL\u LOCKED吗


谢谢

当两个线程不能相互干扰事务时,必须使用单独的连接

对于并发事务,可能会发生冲突,因此您应该设置忙超时或安装忙处理程序。 如果所有连接都来自同一程序中的线程,则可以通过将所有事务包装到互斥对象中来避免冲突