1. A method for executing a loop in an application comprising: executing iterations in a first segment of the loop by a base thread; logging memory transactions that occur during execution of iterations in the first segment by a co-inspector thread to obtain a co-inspector log; executing iterations in a second segment of the loop by a co-thread to obtain temporary results; logging memory transactions that occur during execution of iterations in the second segment to obtain a co-thread log; identifying a thread interdependency by comparing the co-inspector log and the co-thread log; determining, after executing iterations in the first segment, a location of the thread interdependency in the second segment; committing temporary results up to the location; and re-starting execution of the second segment at the location by the base thread.