重排序,是编译器干的还是 CPU 干的
你说的重排序,是编译器干的还是 CPU 干的?
Copie a instrução e escolha um modelo. Ele faz o papel de entrevistador e vai te perguntando ato por ato, em vez de entregar a resposta.
Num celular com o aplicativo instalado, o sistema abre o aplicativo direto. Dentro do WeChat não é possível abrir aplicativos externos — abra primeiro no navegador.
O texto copiado termina com o gabarito que o modelo usa para te avaliar. Não leia antes: o que vale é ter chegado lá sozinho.
这一份从一段十行的代码开始:两个线程,一个写、一个读,问你会不会读到旧值。答「不会」和答「会」都要接着回答同一个问题 —— 谁把顺序换了。
目标是把「重排序」拆成三层:编译器、CPU 乱序、写缓冲与缓存可见性。三层都保证单线程看起来没变,所以这类 bug 在本地永远复现不了。
还有一问是照妖镜:你说的 volatile,能保证 i++ 是原子的吗?以及 C 的 volatile 和 Java 的 volatile 是不是同一回事。
O que esta treina
Este texto no repositório (o gabarito está no fim daquele arquivo — você vai ver)
Já fez este?
Entre para marcar que já treinou este; da próxima vez você verá em que dia foi.
Anotações de quem já fez
Como usar
Esta série ensina em vez de interrogar: ela guia, em vez de apertar até você não ter mais o que dizer. Quando você trava, pergunta primeiro em que camada (nunca ouvi / sei mas não sei por quê / sei por quê mas não aplico) e só então decide o que dar. Só depois de guiar duas vezes ela conta — e aí pede que você repita com suas palavras.
Ela vai cobrar números o tempo todo: responder «tem algum custo» ou «é mais rápido» faz ela te cortar. Conclusão sem ordem de grandeza é conclusão decorada — e é exatamente isso que esta série treina.
Como começar
- Escolha uma, abra e copie o prompt.
- Cole numa conversa nova e vazia, não diga nada e espere a primeira pergunta.
- Prepare-se para dar ordens de grandeza: quantos nanossegundos, quantos microssegundos, quantas vezes mais lento. Dizer que não sabe está ok — ela anota e segue.
Quatro comandos que você pode gritar a qualquer momento
跳过ir já para a próxima cena换个说法explicar esta parte por outro ângulo直说吧dar a resposta completa e depois me fazer repetir复盘pular para o fechamento e imprimir a ficha de balanço
Três armadilhas
- Não leia o gabarito do fim antes — aquela seção de «como as pessoas erram o raciocínio» é a resposta de cada pergunta.
- Não corra para o jargão. Dizer «isso é um TLB miss» é fácil; dizer quanto ele é mais barato que um page fault é o que vale.
- Quando começar a te elogiar, mande olhar a regra «não me elogie». Guiar não é fazer carinho.
Para pegar as ordens de grandeza: leituras aleatórias e depois a do primeiro byte. Para depurar em produção: malloc, travadas de TCP, trocas de contexto. Para código concorrente: reordenação e falso compartilhamento.
Entrar para escrever uma anotação.