1. A method, in a data processing system, for performing a wake-and-go operation, the method comprising: responsive to initiating execution of a thread, dynamically allocating storage space in a hardware private array for storing thread state information for the thread, wherein the hardware private array cannot be addressed by an operating system or work threads running on a processor; detecting that the thread is waiting for an event that modifies a data value associated with a target address; storing the target address in a wake-and-go entry of a wake-and-go storage array in association with a thread identifier of the thread; storing a state of the thread in the hardware private array; placing the thread in a sleep state; and responsive to the event that modifies a data value associated with the target address, reloading the thread state from the hardware private array for the thread corresponding to the thread identifier in the wake-and-go entry, placing the thread in a non-sleep state, performing an operation to determine whether the modified data value is a target data value, and responsive to determining the modified data value is not the target data value, placing the thread in the sleep state.