(original) (raw)

Hi All,


� I am reading about LLVM IR atomics (http://llvm.org/docs/Atomics.html) and get confused about the difference between "Unordered" and "Monotonic". In particular, I am not sure I understand�the statement of "It essentially guarantees that if you take all the operations affecting a specific address, a consistent ordering exists.". For me, it means that for the following example, if {r1,r2} = {1,2}, {r3,r4} = {2,1} is not allowed under�"Monotonic" but allowed under�"Unordered".�Is this all how "Monotonic" is stronger than "Unordered"? If not,�can anyone provide an example where other behaviors are allowed under�"Unordered" but not "Monotonic"?



----------------------------------------------------------------------------------------
T1 � � � � � �T2 � � � � � � � T3 � � � � � � T4
W(X)=1 � � W(X)=2 � � � �r1=R(X) � � r3=R(X)
� � � � � � � � � � � � � � � � � �r2=R(X) � � r4=R(X)

\* Legend: four threads run in parallel; W(X)/R(X) meaning atomic write/read of X.
----------------------------------------------------------------------------------------

Thank you.

- Lei