Ist es möglich, eine garantierte alternierende Ausführung von zwei Threads ohne Verwendung von zwei Atomik (oder anderen Dingen wie Semaphoren usw.) vorzunehmen?
Ich möchte sicherstellen, dass beide Threads ausgeführt werden, vorzugsweise, wenn man wartet, es sollte zuerst gehen, wenn eine andere aktuelle Iteration bestanden hat. Das gleiche Problem geschieht auch mit std :: atomic_flag :: wait .
Code: Select all
#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 update()
{
ping_lock_flag.wait(false, std::memory_order_relaxed);
ping_lock_flag.clear(std::memory_order_release);
std::cout