0

我们有数据将定期更新的用例。但是会有多个线程读取数据。所以我们正在考虑的解决方案是使用双缓冲。所以消费者线程将读取前台页面,而生产者将更新后台页面。一旦生产者更新了后台页面,它将与该页面交换前台页面而不需要锁定。由于数据将相同或不同,我们仍然不在乎,因为它不会影响操作。现在的问题是如何完成这项工作,因为我知道传统的生产者消费者问题,我可以将两个缓冲区用于同一个工作并继续旋转这些东西,但要交换的问题我需要一个锁,但这就是我们想要的避免。

那么如何执行这些事情。在这方面的任何指针都会很棒。

4

1 回答 1

1

从技术上讲,实际交换可以通过以下方式执行:

  • C++11 原子函数 - 例如std::atomic_echangestd::atomic_exchange_explicit
  • 内联汇编 - 例如英特尔lock xchg
  • GCC 内置函数 -__atomic_exchange或更早版本__sync_lock_test_and_set
  • MSVC 功能 -InterlockedExchangePointer
于 2012-11-30T13:41:24.443 回答