Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用SQLite3 API(C+;+;)的线程安全最后一次插入rowid_C++_Multithreading_Sqlite - Fatal编程技术网

C++ 使用SQLite3 API(C+;+;)的线程安全最后一次插入rowid

C++ 使用SQLite3 API(C+;+;)的线程安全最后一次插入rowid,c++,multithreading,sqlite,C++,Multithreading,Sqlite,我有一个程序,可以处理带有线程的数据库(根据用户请求)。但有一个问题: 虽然这是不可能的,但当例如将用户(他的详细信息)插入数据库时,我希望使用sqlite3\u int64 sqlite3\u last\u insert\u rowid(sqlite*)找出他的标识符列值(anint)时,可能会出现问题函数 尽管API通常是线程安全的,但正如我所研究的,如果另一个线程在我插入我的API之后,但在我调用sqlite3\u last\u insert\u row\u id()之前,在同一个表中插入

我有一个程序,可以处理带有线程的数据库(根据用户请求)。但有一个问题:

虽然这是不可能的,但当例如将用户(他的详细信息)插入数据库时,我希望使用
sqlite3\u int64 sqlite3\u last\u insert\u rowid(sqlite*)找出他的标识符列值(an
int
)时,可能会出现问题函数

尽管API通常是线程安全的,但正如我所研究的,如果另一个线程在我插入我的API之后,但在我调用sqlite3\u last\u insert\u row\u id()之前,在同一个表中插入一行,则可能会出现问题

从:

如果一个单独的线程在运行sqlite3_last_INSERT_rowid()函数时对同一数据库连接执行新的插入,从而更改了最后一次插入的rowid,那么sqlite3_last_INSERT_rowid()返回的值是不可预测的,可能不等于旧的或新的最后一次插入的rowid

我如何防止这种情况

我可以对所有数据库访问进行互斥,但在当前阶段,这会很麻烦,这是唯一的方法吗


我也可以执行事务sql查询,但这会产生我想要的效果吗

为了防止多个线程相互干扰,您应该使用事务,并为每个线程使用一个数据库连接

如果您确实想在线程之间共享相同的连接,则需要一个互斥锁