1. A method, in a data processing system, for performing a wake-and-go operation, the method comprising: detecting a thread running on a first processing unit within a plurality of processing units that is waiting for an event that modifies a data value associated with a target address; creating a wake-and-go instance for the thread by populating a wake-and-go storage array with the target address; placing the thread in a sleep state; responsive to detecting the event that modifies the data value associated with the target address, assigning the wake-and-go instance to a second processing unit within the plurality of processing units; and placing the thread in a non-sleep state on the second processing unit.