#include "libatomic.h"
#include "model.h"
-#include "threads_internal.h"
+#include "common.h"
void atomic_store_explicit(struct atomic_object *obj, int value, memory_order order)
{
- thread_current()->switch_to_master(new ModelAction(ATOMIC_WRITE, order, obj, value));
+ DBG();
+ obj->value = value;
+ model->switch_to_master(new ModelAction(ATOMIC_WRITE, order, obj, value));
}
int atomic_load_explicit(struct atomic_object *obj, memory_order order)
{
- thread_current()->switch_to_master(new ModelAction(ATOMIC_READ, order, obj, VALUE_NONE));
- return 0;
+ int value = obj->value;
+ DBG();
+ model->switch_to_master(new ModelAction(ATOMIC_READ, order, obj, value));
+ return value;
+}
+
+void atomic_init(struct atomic_object *obj, int value)
+{
+ obj->value = value;
}