重排序,是编译器干的还是 CPU 干的
你说的重排序,是编译器干的还是 CPU 干的?
Copia la indicación y elige un modelo. Hará de entrevistador y te irá preguntando escena por escena en vez de darte la respuesta.
En un móvil con la aplicación instalada, el sistema la abre directamente. Dentro de WeChat no se pueden abrir aplicaciones externas: ábrelo primero en el navegador.
El texto copiado termina con la plantilla de corrección que usa el modelo. No la leas tú antes: lo que cuenta es haberlo razonado por tu cuenta.
这一份从一段十行的代码开始:两个线程,一个写、一个读,问你会不会读到旧值。答「不会」和答「会」都要接着回答同一个问题 —— 谁把顺序换了。
目标是把「重排序」拆成三层:编译器、CPU 乱序、写缓冲与缓存可见性。三层都保证单线程看起来没变,所以这类 bug 在本地永远复现不了。
还有一问是照妖镜:你说的 volatile,能保证 i++ 是原子的吗?以及 C 的 volatile 和 Java 的 volatile 是不是同一回事。
Qué entrena esta
Este texto en el repositorio (la solución está al final de ese archivo: la verás)
¿Ya hiciste este?
Inicia sesión para marcar que ya lo practicaste; la próxima vez verás qué día fue.
Notas de quienes lo hicieron
Cómo se usa
Esta serie enseña en vez de interrogar: te guía en lugar de apretar hasta que no te quede nada que decir. Cuando te atascas pregunta primero en qué capa (no lo he oído / lo sé pero no sé por qué / sé por qué pero no lo aplico) y luego decide qué darte. Solo tras guiarte dos veces te lo dice, y entonces te pide que lo repitas con tus palabras.
Te va a exigir números sin parar: si respondes «tiene algo de coste» o «es más rápido», te corta. Una conclusión sin orden de magnitud es una conclusión memorizada; eso es justo lo que entrena esta serie.
Cómo empezar
- Elige una, ábrela y copia el prompt.
- Pégalo en una conversación nueva y vacía, no digas nada y espera su primera pregunta.
- Prepárate para dar órdenes de magnitud: cuántos nanosegundos, cuántos microsegundos, cuántas veces más lento. Decir que no lo sabes vale: lo anota y sigue.
Cuatro órdenes que puedes soltar en cualquier momento
跳过pasar ya a la siguiente escena换个说法explicar esta parte desde otro ángulo直说吧dar la respuesta completa y luego hacérmela repetir复盘saltar al cierre y sacar la ficha de balance
Tres trampas
- No leas antes el solucionario del final: ese apartado de «errores de razonamiento habituales» es la respuesta a cada pregunta.
- No corras al tecnicismo. Decir «eso es un fallo de TLB» es fácil; decir cuánto más barato es que un fallo de página es lo que cuenta.
- Cuando empiece a elogiarte, remítelo a la regla «no me elogies». Guiar no es consentir.
Para coger las magnitudes: lecturas aleatorias y luego el primer byte. Para depurar en producción: malloc, atascos de TCP, cambios de contexto. Para código concurrente: reordenación y falso compartido.
Entrar para escribir una nota.