-void write(Data *new_data) {
- while (true) {
- Data *prev = data.load(memory_order_relaxed);
- bool succ = data.compare_exchange_strong(prev, new_data,
- memory_order_release, memory_order_relaxed);
+Data* write(int d1, int d2, int d3) {
+ bool succ = false;
+ Data *tmp = (Data*) malloc(sizeof(Data));
+ do {
+ Data *prev = data.load(memory_order_acquire);
+ //store_32(&tmp->data1, prev->data1 + d1);
+ tmp->data1 = prev->data1 + d1;
+ tmp->data2 = prev->data2 + d2;
+ tmp->data3 = prev->data3 + d3;
+ succ = data.compare_exchange_strong(prev, tmp,
+ memory_order_acq_rel, memory_order_relaxed);