Dois-je appeler atomique load/store explicitement?

C++11 introduit la std::atomic<> la bibliothèque de modèles. La norme spécifie les store() et load() opérations de atomiquement set /get une variable partagée par plus d'un thread.

Ma question est: est-cession d'accès et les opérations atomiques?

À savoir:

std::atomic<bool> stop(false);
...
void thread_1_run_until_stopped()
{
    if(!stop.load())
        /* do stuff */
}

void thread_2_set_stop()
{        
    stop.store(true);
}

Équivalent à:

void thread_1_run_until_stopped()
{
    if(!stop)
        /* do stuff */
}

void thread_2_set_stop()
{        
    stop = true;
}
  • stop.load(std::memory_order_relaxed) et stop.store(true, std::memory_order_relaxed); doit être bien ici, comme le dit Serge. Vous avez juste besoin de la banque pour être vu rapidement, et relaxed garantit que. Vous avez seulement besoin d'un plus fort de la commande si vous avez besoin de synchroniser d'autres données.
InformationsquelleAutor bavaza | 2013-09-17