使用线程进行数据库访问

时间:2016-09-07 16:21:41

标签: c++ multithreading sqlite

我正在开发一个程序(使用在Linux机器上运行的C ++),它使用SQLite作为后端。

它有2个线程执行以下任务:

  • 主题1
    • 等待一段数据到达(在这种情况下,通过无线电模块)
    • 立即将其插入数据库
    • 返回等待新数据
    • 重要的是这个线程尽可能多地“监听”并且不会被阻止等待插入数据库
  • 主题2
    • 每隔2分钟,在数据库上运行SELECT以查找未处理的数据
    • 处理数据
    • 更新使用标记获取的行以显示它们已被处理

关键是要确保线程1始终可以插入到数据库中,即使这意味着线程2无法进行SELECT或UPDATE(因为这可能只是在将来发生,时间不是危急)。

我希望找到一种方法来使用SQLite以某种方式确定INSERT的优先级,但到目前为止找不到方法。另一个想法是线程1将数据推送到一个基本队列(保存在内存中),然后每隔一段时间批量插入它(因为这不会阻止数据接收,可以做一个简单的检查,看看是否数据库被锁定,如果是,请等待几毫秒再试一次)。

但是,使用SQLite和C ++线程执行此操作的“正确”方法是什么?

1 个答案:

答案 0 :(得分:0)

可以在有或没有多线程支持的情况下打开SQlite数据库。两个线程都应该单独打开数据库。 如果您想要努力,可以使用优先级队列并处理查询。