У нас есть случай, когда данные будут обновляться через регулярные промежутки времени. Но будет несколько потоков, читающих данные. Таким образом, решение, которое мы думаем, заключается в использовании двойных буферов. Таким образом, потребительские потоки будут читать переднюю страницу, а производитель обновит фоновую страницу. Как только производитель обновит фоновую страницу, он поменяет страницу переднего плана на эту страницу без взятия блокировки. Поскольку данные будут одинаковыми или разными, нам все равно, поскольку это не повлияет на работу.
Теперь вопрос состоит в том, как выполнить работу, поскольку я знаю традиционную проблему потребителя-производителя, где я могу использовать два буфера для одной и той же работы и продолжать вращать вещи, но проблема, чтобы поменять местами, мне нужна блокировка, но это то, что мы хотим избежать.
Так как выполнять вещи. Любой указатель на этот счет будет отличным.
Технически фактический обмен может быть выполнен:
std::atomic_echange
, std::atomic_exchange_explicit
lock xchg
__atomic_exchange
или старше __sync_lock_test_and_set
InterlockedExchangePointer
Других решений пока нет …