Recall that this works by reading the UART status register until the receive data resister is “not empty” and then reading the register. Suppose that two threads access the UART – if thread 1 reads the status register and finds the data register “not empty”, but is then preempted by thread 2 which also tests the status and reads the data register, then when thread 1 is resumed, its knowlege of the status register will be incorrect and it may read garbage from the data register.