1. A computer-implemented method for carrying out operations in a multiprocessor system, the method comprising: recognizing by a processor of the multiprocessor system a need for speculative execution of a program thread running within the processor; allocating at least one speculation identification (ID) number to the program thread running speculatively; maintaining by the at least one processor, a directory based speculation control responsive to the speculation identification number; counting by the at least one processor instances of use of the speculation identification number associated with the thread being active in the multiprocessor system; and preventing by the at least one processor, the speculation identification number from being allocated to a new thread until the counting indicates no instances of use of that ID being active in the system, said operations further comprising: counting instances of a group of the speculation IDs together; allowing IDs of the group to become available for allocation responsive to the counting; managing a pool of speculation IDs in accordance with a plurality of domains, such that IDs are allocated independently for each domain; and allocating a mode of speculative execution to each domain.