1. A method, comprising: receiving, in a program order, a first and a second operations in a first thread; determining a class of each of the first and second operations; comparing the determined classes of the first and second operations; and permitting reordering of visibility order for the first and second operations in a shared memory based on the comparison of the determined classes, wherein the visibility order determines visibility in the shared memory, by a second thread, of stored results from execution of the first and second operations; wherein the visibility order is not permitted to change from the program order of the first and second operations when one of the first and second operations is of a synchronization class of operations.