1. An apparatus for supporting speculative execution of a plurality of speculative threads, the threads comprising computer program instructions, said apparatus comprising: a shared memory comprising a number of shared memory elements; one or more processors for executing the speculative threads, wherein during execution of the threads, the one or more processors access selected shared memory elements in the shared memory, and each time a processor executes one of the speculative threads, a software data structure is created corresponding to the speculative thread the processor is executing, each software data structure indicating which of the shared memory elements the processor accessed while executing the data structure's corresponding speculative thread, wherein each software data structure has a one-to-one relation with a corresponding speculative thread allowing only information relating to execution of the corresponding speculative thread to be stored in the data structure; and processing means for detecting collisions between threads by comparing the data structure of a given speculative thread with the data structures corresponding to other speculative threads on which the given speculative thread depends, wherein the comparing occurs serially after the given speculative thread and the other speculative threads on which the given speculative thread depends have finished executing their computer program instructions and prior to being committed.