gpt4 book ai didi

c++ - 使用线程访问数据库

转载 作者:太空宇宙 更新时间:2023-11-04 13:12:05 27 4
gpt4 key购买 nike

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

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

  • 线程 1
    • 等待一条数据到达(在本例中,通过 radio 模块)
    • 立即将其插入数据库
    • 返回等待新数据
    • 重要的是这个线程尽可能多地“监听”并且没有被阻塞等待插入数据库
  • 线程 2
    • 每 2 分钟,在数据库上运行一次 SELECT 以查找未处理的数据
    • 处理数据
    • 用标志更新获取的行以表明它们已被处理

关键是要确保线程 1 始终可以插入数据库,即使这意味着线程 2 无法进行 SELECT 或 UPDATE(因为这可能会在未来某个时间点发生,时机未到)批判的)。

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

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

最佳答案

SQlite 数据库可以在有或没有多线程支持的情况下打开。两个线程应该分别打开数据库。如果您想以困难的方式进行操作,可以使用优先级队列并处理查询。

关于c++ - 使用线程访问数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39375012/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com