Synchronizing Relationship

Thread 1 stores a value with memory_order_release. Thread 2 loads the same atomic with memory_order_acquire and sees Thread 1's store. What does this establish?

A

Thread 2 is guaranteed to execute after Thread 1 completes entirely

B

Nothing: memory orderings only affect the compiler, not runtime behavior

C

A happens-before relationship: all writes by Thread 1 before its release store are visible to Thread 2 after its acquire load

D

Only the atomic variable itself is synchronized — other variables remain unordered