The ROme OpTimistic Simulator  2.0.0
A General-Purpose Multithreaded Parallel/Distributed Simulation Platform
atomic.h
Go to the documentation of this file.
1 
32 #pragma once
33 
34 #include <stdbool.h>
35 #include <stdint.h>
36 
42 typedef struct {
43  volatile int count;
44 } atomic_t;
45 
51 typedef struct {
52  volatile unsigned int lock;
53 } spinlock_t;
54 
55 
56 inline bool iCAS(volatile uint32_t * ptr, uint32_t oldVal, uint32_t newVal);
57 inline int atomic_test_and_set(int *);
58 inline void atomic_inc(atomic_t *);
59 inline void atomic_dec(atomic_t *);
60 inline int atomic_inc_and_test(atomic_t * v);
61 inline bool spin_trylock(spinlock_t * s);
62 inline void spin_unlock(spinlock_t * s);
63 inline void spin_lock(spinlock_t * s);
64 
66 #define atomic_read(v) ((v)->count)
67 
69 #define atomic_set(v,i) (((v)->count) = (i))
70 
72 #define spinlock_init(s) ((s)->lock = 0)
73 
bool spin_trylock(spinlock_t *s)
Definition: x86.c:151
volatile int count
Atomic counter. Use the provided API to ensure atomicity.
Definition: atomic.h:43
void atomic_dec(atomic_t *)
Definition: x86.c:103
int atomic_test_and_set(int *)
Definition: x86.c:71
void spin_lock(spinlock_t *s)
Definition: x86.c:135
bool iCAS(volatile uint32_t *ptr, uint32_t oldVal, uint32_t newVal)
Definition: x86.c:49
volatile unsigned int lock
The lock guard.
Definition: atomic.h:52
int atomic_inc_and_test(atomic_t *v)
Definition: x86.c:118
void atomic_inc(atomic_t *)
Definition: x86.c:90
void spin_unlock(spinlock_t *s)
Definition: x86.c:161