1. A method, in a data processing system, for performing a wake-and-go operation, the method comprising: examining, by a hardware wake-and-go mechanism within a processor, an instruction stream for a thread as the instruction stream is being pre-fetched; recognizing by the hardware wake-and-go mechanism, a programming idiom in the instruction stream that indicates the thread is waiting for an event that writes a data value to a target address; populating, by the hardware wake-and-go mechanism, a wake-and-go storage array with the target address; placing the thread in a sleep state; responsive to the event that writes the data value to the target address, determining whether to wake the thread; and in response to a determination that the thread is to be awoken, placing the thread in a non-sleep state.