This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [powerpc64le] seq_cst memory order possibly not honored

On 14.08.2015 11:51, Jonathan Wakely wrote:
On 14 August 2015 at 01:37, Andrey Semashev wrote:
1. Is my test valid or is there a flaw that I'm missing?

The cppmem tool at shows
that there are consistent executions where (x==0 && y==0) is true. I
used this code:

int main() {
   atomic_int a = 0;
   atomic_int b = 0;
   int x, y;
       x = b.load(mo_relaxed);
     {, mo_seq_cst);
       y = a.load(mo_relaxed);
   return 0;

I'm not familiar with that tool and not sure how to interpret its output, but I think it misses one point that is present in the original test and I failed to mention. The Boost.Atomic test uses Boost.Thread barriers to ensure that both threads have executed the store-load-load region before checking for x and y.

Otherwise I cannot see how (x==0 && y==0) could happen. The last load in each thread is sequenced after the first seq_cst store and both stores are ordered with respect to each other, so one of the threads should produce 1.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]