In computers, a critical section routine is an approach to the problem of two or more programs competing for the same resource at the same time. Imagine that two programs want to increment a counter. If both do it at the same time: fetch the operand , increment it, and store back the incremented value, then one of the increments will be lost. On today's processors, the programs can use an atomic read-modify-write instruction, such as fetch-and-op, compare-and-swap, or exchange. On early processors, these instructions did not exist; the problem was to accomplish the incrementing atomically, using only ordinary assembler instructions. The problem was defined and first solved by Edsgar Dijkstra. "Critical section routine" was his name for the code that solved the problem.