On Mon, Oct 10, 2016 at 15:59:04 +0200, Paolo Bonzini wrote:
> There is a data race if the variable is written concurrently to the
> read.  In C11 this has undefined behavior.  Use atomic_read.  The
> write side does not need atomic_set, because it is protected by a
> mutex.

Is tsan happy with the way seqlocks are written right now?

According to this message I just found by Dmitry Vyukov, tsan
shouldn't be. Note however that the message is from April'15,
so it might be outdated:

Dmitry Vyukov wrote:
> 1. Tsan is bad at handling stand-alone memory barriers. 
<snip>
> And here is a way to express seqlock that is both correct, is 
> understood by tsan and is no overhead on x86: 
> 
> // writer 
> atomic_store(&seq, seq+1, memory_order_relaxed); 
> atomic_store(&data[0], ..., memory_order_release); 
> ... 
> atomic_store(&data[N], ..., memory_order_release); 
> atomic_store(&seq, seq+1, memory_order_release); 
> 
> // reader 
> atomic_load(&seq, memory_order_acquire); 
> d0 = atomic_load(&data[0], memory_order_acquire); 
> ... 
> dN = atomic_load(&data[N], memory_order_acquire); 
> atomic_load(&seq, memory_order_relaxed); 

Source: https://groups.google.com/forum/#!topic/thread-sanitizer/B4i9EMQ4BQE

Thanks,

                Emilio

Reply via email to