1. A method, in a data processing system, for performing speculative execution, the method comprising: examining an instruction stream being pre-fetched for a thread for instances of a programming idiom that causes the thread to wait for an event associated with a target address; in response to detecting a first instance of the programming idiom in the instruction stream, performing a first look-ahead polling operation to determine whether an event associated with the first instance of the programming idiom has already occurred; in response to the first look-ahead polling operation resulting in a determination that the event associated with the first instance of the programming idiom has not already occurred, storing a first entry in a wake-and-go storage array wherein the first entry comprises a first target address associated with the first instance of the programming idiom: in response to detecting a second instance of the programming idiom in the instruction stream, performing a second look-ahead polling operation to determine whether an event associated with the second instance of the programming idiom has already occurred; in response to the second look-ahead polling operation resulting in a determination that the event associated with the second instance of the programming idiom has already occurred, recording an instruction address for speculative execution of instructions following the second instance of the programming idiom in the instruction stream of the thread; and responsive to detecting the first instance of the programming idiom during execution of the thread, storing thread state information for the thread and initiating speculative execution from the recorded instruction address.