1. An apparatus that supports execution of computer program instructions speculatively out of program order comprising: a plurality of threads for executing computer program instructions, and a shared memory, which comprises a number of shared memory elements accessible to the plurality of threads; wherein each of the threads is associated with a respective data structure for collision detection between the plurality of threads, said data structure being arranged to store information indicating which of said number of shared memory elements the associated thread has accessed, and wherein each of the threads includes means for accessing a selected shared memory element in the shared memory, and means for storing information in the associated data structure of the thread, said information indicating the thread's access to the selected shared memory element.