1. A method, in a data processing system, for performing a wake-and-go operation, the method comprising: examining an instruction stream of a thread for a programming idiom that causes the thread to wait for an event that modifies a data value at a target address; in response to detecting the programming idiom in the thread, performing a look-ahead polling operation to determine whether the event has occurred; in response to the look-ahead polling operation resulting in a determination that the event has not occurred, populating a wake-and-go storage array with the target address; responsive to detecting the programming idiom during execution of the thread, storing thread state information for the thread and placing the thread in a sleep state; and in response to occurrence of the event, placing the thread in a non-sleep state.