1. A method in a computing system of augmenting a multithreaded application to provide deterministic execution of the multithreaded application on a multiprocessing system, the method comprising: accessing multithreaded application code specifying two or more threads of execution; automatically selecting one or more locations within the multithreaded application; and inserting synchronization code into the multithreaded application code at the selected one or more locations, the synchronization code, by virtue of being placed at the selected one or more locations, allows for a particular execution order among sets of operations to be determined each time the multithreaded application code is executed with a particular input, wherein groupings of operations for the sets of operations are based on the selected one or more locations, and wherein at least one of the sets of operations comprises one or more operations capable of affecting a state accessible by at least one other of the two or more threads when the multithreaded application code is executed, wherein the execution order is based on the sequence in which the two or more threads were created and is further determined by the synchronization code reading a value of a token, and wherein for each thread of the two or more threads, prior to executing the at least one of the sets of operations capable of affecting a state accessible by at least one other of the two or more threads: invoking the synchronization code to determine the value of the token; when the determined value of the token matches a thread identifier of the thread, allowing execution of the set of operations; and when the determined value of the token does not match a thread identifier of the thread, suspending execution of the thread.