This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
atomic_thread_fence() semantics
- From: Mattias Rönnblom <hofors at lysator dot liu dot se>
- To: gcc at gcc dot gnu dot org
- Date: Thu, 19 Oct 2017 13:58:39 +0200
- Subject: atomic_thread_fence() semantics
- Authentication-results: sourceware.org; auth=none
Hi.
I have this code:
#include <stdatomic.h>
int ready;
int message;
void send_x4711(int m) {
message = m*4711;
atomic_thread_fence(memory_order_release);
ready = 1;
}
When I compile it with GCC 7.2 -O3 -std=c11 on x86_64 it produces the
following code:
send_x4711:
.LFB0:
.LVL0:
imul edi, edi, 4711
.LVL1:
mov DWORD PTR ready[rip], 1
mov DWORD PTR message[rip], edi
ret
I expected the store to 'message' and 'ready' to be in program order.
Did I misunderstand the semantics of
atomic_thread_fence+memory_order_release?
Regards,
Mattias