Un circuito como una unidad de lógica aritmética tomará un par de números como entradas y producirá un número como salida. Puede garantizar que dentro de un período de tiempo, todos los bits de la salida hayan alcanzado sus estados finales correctos, pero la cantidad de tiempo real para que los bits de salida sean válidos podría variar considerablemente en función de una variedad de factores.
Sería posible construir una ALU con una entrada "válida" y una salida "válida", y especificar que siempre que la entrada "válida" sea baja durante una cantidad de tiempo suficiente antes de que se realice un cálculo, y las entradas de datos contienen el los valores deseados antes de que la entrada "válida" suba, la salida "válida" no aumentará hasta que los bits de salida sean correctos. Tal diseño probablemente requeriría aproximadamente el doble de circuitos que una ALU convencional [básicamente tendría que hacer un seguimiento de si cada bit era "conocido" como cero o "conocido" como uno; su salida "válida" se volvería verdadera una vez que se conociera el estado de cada bit de salida].
Para empeorar las cosas, permitir que las partes de una CPU que serían capaces de ejecutarse más rápido solo sea útil si no están esperando todo el tiempo para que las partes más lentas se pongan al día. Para que eso suceda, debe haber lógica para decidir qué parte de la máquina está "adelantada" en un momento dado y seleccionar un curso de acción basado en eso. Desafortunadamente, ese tipo de decisión es una de las más difíciles para la electrónica. Decidir de manera confiable cuál de los dos eventos sucedió primero generalmente solo es fácil si se puede garantizar que nunca habrá "llamadas cerradas". Supongamos que un secuenciador de memoria está manejando una solicitud de la unidad de procesamiento # 1 y la unidad # 1 tiene otra solicitud pendiente después de eso. Si la unidad n. ° 2 envía una solicitud antes de que se complete la primera solicitud del n. ° 1, la unidad de memoria debe manejar eso; de lo contrario, debe manejar la siguiente solicitud de la unidad n. ° 1. Eso parecería un diseño razonable, pero termina siendo sorprendentemente problemático. El problema es que si hay un momento en el tiempo tal que una solicitud recibida antes de ese momento se procesará de inmediato, y una solicitud recibida después de eso tendrá que esperar, la cantidad de tiempo requerida para determinar si una solicitud supera el plazo será aproximadamente inversamente proporcional a la diferencia entre el momento en que se recibió la solicitud y la fecha límite. El tiempo requerido para que la unidad de memoria determine que una solicitud del n. ° 2 superó la fecha límite en un femptosegundo podría exceder sustancialmente la cantidad de tiempo que se hubiera requerido para atender una segunda solicitud de la unidad n. ° 1, pero la unidad no puede atender solicite hasta que decida cuál atender primero.
Hacer que todo funcione con un reloj común no solo elimina la necesidad de que los circuitos determinen cuándo la salida de un cálculo es válida, sino que también permite que se eliminen las "llamadas cerradas". Si todo en el sistema funciona con un reloj de 100Mhz, no cambia la señal en respuesta a un reloj hasta 1ns después del borde del reloj, y todo lo que sucederá en respuesta a un borde del reloj ocurre dentro de 7ns, entonces todo lo que sucederá antes de un el borde del reloj particular "ganará" por al menos 3ns, y todo lo que no va a suceder hasta después de un borde del reloj "perderá" por al menos 1ns. Determinar si una señal tiene posibilidades antes o después del reloj, cuando se garantiza que no está "cerca", es mucho más fácil que determinar cuál de las dos señales temporizadas arbitrariamente ocurre primero.