C ++ std :: atômico vs. Boost atômico

Na minha aplicação, tenho uma variável int e uma bool, que são acessadas (várias gravações / leituras) por vários threads. Atualmente, estou usando dois mutexes, um para int e outro para bool para proteger essas variávei

Eu ouvi falar sobre o uso de variáveis atômicas e operadores para escrever um programa multithread sem bloqueio. Minhas perguntas são

Qual é a definição de variáveis atômicas e operadore Qual é a principal diferença entrestd :: atomic e boost / atomic.hpp? Qual é o mais padrão ou popular? Essas bibliotecas dependem da plataforma? Atualmente, estou usando o gnu gcc 4.6 no Linux, mas, idealmente, deve ser multiplataforma. Ouvi dizer que a definição de "atômico" também depende do hardware. Alguém pode explicar isso também? Qual é a melhor maneira de compartilhar uma variável bool entre vários threads? Eu preferiria não usar o "voláti "palavra-chave.

Esses códigos são seguros para threads?

double double_m; // double_m is only accessed by current thread.
std::atomic<bool> atomic_bool_x;
atomic_bool_x = true && (double_m > 12.5);

int int_n; // int_n is only accessed by current thread.
std::atomic<int> atomic_int_x;
std::atomic<int> atomic_int_y;
atomic_int_y = atomic_int_x * int_n;

questionAnswers(8)

yourAnswerToTheQuestion