Можно ли сделать гарантированное чередующее выполнение двух потоков без использования двух атомиков (или других вещей, таких как семафоры и т. Д.)? Я хочу убедиться, что оба потока выполняются, предпочтительно, если кто -то ждал, он должен перейти, когда другая прошла текущая итерация. Та же проблема происходит даже с STD :: ATOMIC_FLAG :: WAIT .
желаемый результат может быть достигнут с двумя атомными флагами, такими как в демонстрации:
#include
#include
#include
std::atomic_flag ping_lock_flag = ATOMIC_FLAG_INIT;
std::atomic_flag pong_lock_flag = ATOMIC_FLAG_INIT;
std::atomic_int idx = 0;
std::vector v(10);
void thread1fn()
{
std::cout
Подробнее здесь: https://stackoverflow.com/questions/794 ... -execution