2015-07-21 28 views
1

我有一个程序用线程(根据用户请求)处理数据库。虽然存在一个问题:SQLite3线程安全的last_insert_rowid API(C++)

尽管不太可能,但例如在将用户插入数据库(他的详细信息)并且我想要查找其标识符列值(int)时可能会出现问题,使用sqlite3_int64 sqlite3_last_insert_rowid(sqlite*);函数。

即使API一般是线程安全的,因为我研究尽可能多的 - 如果可能另一个线程插入一行到相同的表我插入我的出现问题,但之前我叫sqlite3_last_insert_row_id()。我如何防止这种情况?我可以互斥所有数据库访问权限,但在目前阶段这会很麻烦,这是唯一的方法吗?

我也可以做一个事务sql查询,但会有我想要的相同效果?

回答

0

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

如果你真的想共享线程之间的相同连接,你需要一个互斥锁。