view src/parallel_execution/AtomicReference.cbc @ 468:ac244346c85d

Change used interface syntax from #include to #interface
author Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
date Mon, 25 Dec 2017 18:10:56 +0900
parents 8d7e5d48cad3
children
line wrap: on
line source

#include "../context.h"
#interface "Atomic.h"
#include <stdio.h>

Atomic* createAtomicReference(struct Context* context) {
    struct Atomic* atomic = new Atomic();
    struct AtomicReference* atomicReference = new AtomicReference();
    atomic->atomic = (union Data*)atomicReference;
    atomic->checkAndSet = C_checkAndSetAtomicReference;
    return atomic;
}

__code checkAndSetAtomicReference(struct AtomicReference* atomic, union Data** ptr, union Data* oldData, union Data* newData, __code next(...), __code fail(...)) {
    if (__sync_bool_compare_and_swap(ptr, oldData, newData)) {
        goto next(...);
    }
    goto fail(...);
}