1. A method for avoiding locks while executing a critical section, comprising: allowing a process to execute a critical section of code within a program without first acquiring a lock associated with the critical section, wherein upon executing a load operation during execution of critical section, the method further comprises load marking a corresponding cache line; if the process completes the critical section without encountering an interfering data access from another process, resuming execution of the program past the critical section; and if an interfering data access from another process is encountered during execution of the critical section, the method further comprises, discarding changes made during execution of the critical section, and attempting to re-execute the critical section zero or more times; wherein if the critical section is not successfully completed after zero or more attempts, the method further comprises, acquiring a lock associated with the critical section, executing the critical section, and releasing the lock associated with the critical section.