ool volátil para controle de thread é considerado errad

Como resultado da minha resposta paraessa questã, Comecei a ler sobre a palavra-chavevolatile e qual é o consenso sobre isso. Vejo que há muitas informações sobre isso, algumas antigas que parecem erradas agora e muitas novas que dizem que quase não há lugar na programação multithread. Por isso, gostaria de esclarecer um uso específico (não foi possível encontrar uma resposta exata aqui no SO).

Também quero salientar que compreendo os requisitos para escrever código multiencadeado em geral e por quevolatile não está resolvendo coisas. Ainda assim, vejo código usandovolatile para controle de encadeamento nas bases de código em que trabalho. Além disso, este é o único caso em que uso ovolatile como todos os outros recursos compartilhados estão sincronizados corretament

Dizemos que temos uma classe como:

class SomeWorker
{
public:
    SomeWorker() : isRunning_(false) {}
    void start() { isRunning_ = true; /* spawns thread and calls run */ }
    void stop() { isRunning_ = false; }

private:
    void run()
    {
        while (isRunning_)
        {
            // do something
        }
    }
    volatile bool isRunning_;
};

or questões de simplicidade, algumas coisas são deixadas de fora, mas o essencial é que seja criado um objeto que faça algo em um thread recém-gerado verificando um volatile) booleano para saber se deve parar. Esse valor booleano é definido em outro encadeamento sempre que ele deseja que o trabalhador par

Meu entendimento é que o motivo de usarvolatile neste caso específico é simplesmente evitar qualquer otimização que o armazene em cache em um registro para o loop. Portanto, resultando em um loop infinito. Não há necessidade de sincronizar as coisas corretamente, porque o encadeamento do trabalhador acabará recebendo o novo valor?

Gostaria de entender se isso é considerado completamente errado e se a abordagem correta é usar uma variável sincronizad Existe uma diferença entre compilador / arquitetura / núcleos? Talvez seja apenas uma abordagem desleixada que vale a pena evitar?

Eu ficaria feliz se alguém esclarecesse isso. Obrigado

EDITA

Eu estaria interessado em ver (em código) como você decide resolver isso.

questionAnswers(5)

yourAnswerToTheQuestion