gpt4 book ai didi

c++ - 如何同步写入线程和读取线程之间的数据库访问?

转载 作者:可可西里 更新时间:2023-11-01 06:45:26 25 4
gpt4 key购买 nike

我的程序有两个线程:

  1. 处理用户输入和排队数据库写入的主执行线程
  2. 一个实用程序线程,每秒唤醒一次并将写入刷新到数据库

在主线程中,我偶尔需要读取数据库。当发生这种情况时,性能并不重要,正确性才是。 (在一个完美的世界中,我会从缓存中读取数据,而不是往返数据库 - 但为了讨论起见,让我们把它放在一边。)

我如何确保主线程看到正确/静止的数据库?

标准互斥锁不起作用,因为我冒着让主线程在数据刷新到数据库之前获取互斥锁的风险。这将是一个很大的竞争条件。

我真正想要的是某种互斥量,它让执行的主线程仅在互斥量被获取并释放一次后继续执行。这样的事情存在吗?解决此问题的最佳方法是什么?

更新:在做了一些额外的研究之后,我可能会使用 Boost's Conditional Variable来解决这个问题。要么,要么硬着头皮缓存我的写入。感谢反馈!

最佳答案

有几种可能的解决方案:

  • 让每个线程打开自己的 d/b 连接并独占使用它
  • 使用单个连接,但让每个线程拥有访问它的互斥锁。

我认为第二个选择没有问题。没有什么可冲的就冲有什么害处?

关于c++ - 如何同步写入线程和读取线程之间的数据库访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2569695/

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