6 std::atomic<int> _data;
9 atomic_store_explicit(&_seq, 0, std::memory_order_release);
10 atomic_store_explicit(&_data, 0, std::memory_order_release);
14 int old_seq = atomic_load(&_seq);
16 int c0 = (old_seq % 2 == 1);
18 int res = atomic_load(&_data);
19 int seq = atomic_load(&_seq);
30 int seqlock_write(int new_data) {
31 int old_seq = atomic_load(&_seq);
32 int c2 = (old_seq % 2 == 1);
34 int new_seq = old_seq + 1;
35 if (atomic_compare_exchange_strong(&_seq, &old_seq, new_seq)) {
36 atomic_store_explicit(&_data, new_data, std::memory_order_release);
37 atomic_fetch_add(&_seq, 1);
45 problemsize seqlock_write(3);
51 problemsize r1=seqlock_read();
57 problemsize r1=seqlock_read();
61 int main(int argc, char **argv) {
65 pthread_create(&t1, 0,&a, NULL);
66 pthread_create(&t2, 0,&b, NULL);
67 pthread_create(&t3, 0,&c, NULL);