我们有用例,定期更新数据。但是会有多个线程读取数据。所以我们想到的解决方案是使用双缓冲区。因此,消费者线程将读取前景页面,而生产者将更新后台页面。生产者更新后台页面后,它会将前景页面与此页面交换,而不会锁定。由于数据相同或不同,我们仍然不在乎,因为它不会影响操作。 现在的问题是如何完成工作,因为我知道传统的生产者消费者问题,我可以使用两个缓冲区为同一个工作并继续旋转的东西,但交换的问题我需要一个锁,但这就是我们想要的避免。
那么如何执行这些事情。在这方面任何指针都会很棒。
答案 0 :(得分:1)
从技术上讲,实际的交换可以通过以下方式执行:
std::atomic_echange
,std::atomic_exchange_explicit
lock xchg
__atomic_exchange
或更早版__sync_lock_test_and_set
InterlockedExchangePointer