El nuevo interfaz Io del lenguaje Zig incluye varias implementaciones de concurrencia, y std.Io.Threaded es la más directa: recurre a hilos del sistema operativo y llamadas al sistema bloqueantes, pero incorpora cancelación fiable, algo poco habitual en este enfoque. El artículo explica por qué la cancelación es inseparable de la concurrencia: cuando una tarea deja de ser necesaria, no basta con esperar a que termine, hay que interrumpirla de forma activa. El problema clásico de «simplemente usa hilos» es que, una vez que un hilo queda bloqueado dentro de un syscall, el lenguaje no ofrece forma de desbloquearlo.
La solución de Zig se apoya en POSIX en un protocolo basado en señales y memoria compartida: el hilo que cancela activa un flag y envía una señal al hilo cancelado; al recibir EINTR, este consulta el flag y, si procede, reconoce la cancelación y desenrolla su pila. El resultado se materializa como error.Canceled. En Windows se usa directamente NtCancelSynchronousIoFile, una primitiva más limpia que el equivalente Unix. El texto compara el enfoque con antecedentes como la interrupción de Java —que no interrumpe syscalls de E/S—, pthread_cancel —que además destruye el hilo— y el modelo async/concurrent de Zig, que separa lo que «puede» ejecutarse en paralelo de lo que «debe» hacerlo y se apoya en un pool de hilos.
