#define RW_LOCK_BIAS 0x00100000
#define WRITE_LOCK_CMP RW_LOCK_BIAS
+typedef union {
+ atomic_int lock;
+} rwlock_t;
+
/** Example implementation of linux rw lock along with 2 thread test
* driver... */
@End
*/
-/**
- */
-
-typedef union {
- atomic_int lock;
-} rwlock_t;
-
static inline int read_can_lock(rwlock_t *lock)
{
return atomic_load_explicit(&lock->lock, memory_order_relaxed) > 0;
int priorvalue = atomic_fetch_sub_explicit(&rw->lock, 1, memory_order_acquire);
/**
@Begin
- @Commit_point_define_check: __ATOMIC_RET__ > 0
+ @Commit_point_define_check: priorvalue > 0
@Label:Read_Lock_Success_1
@End
*/
priorvalue = atomic_fetch_sub_explicit(&rw->lock, 1, memory_order_acquire);
/**
@Begin
- @Commit_point_define_check: __ATOMIC_RET__ > 0
+ @Commit_point_define_check: priorvalue > 0
@Label:Read_Lock_Success_2
@End
*/
int priorvalue = atomic_fetch_sub_explicit(&rw->lock, RW_LOCK_BIAS, memory_order_acquire);
/**
@Begin
- @Commit_point_define_check: __ATOMIC_RET__ == RW_LOCK_BIAS
+ @Commit_point_define_check: priorvalue == RW_LOCK_BIAS
@Label: Write_Lock_Success_1
@End
*/
priorvalue = atomic_fetch_sub_explicit(&rw->lock, RW_LOCK_BIAS, memory_order_acquire);
/**
@Begin
- @Commit_point_define_check: __ATOMIC_RET__ == RW_LOCK_BIAS
+ @Commit_point_define_check: priorvalue == RW_LOCK_BIAS
@Label: Write_Lock_Success_2
@End
*/
writer_lock_acquired = false;
@End
*/
-
static inline void write_unlock(rwlock_t *rw)
{
atomic_fetch_add_explicit(&rw->lock, RW_LOCK_BIAS, memory_order_release);
int user_main(int argc, char **argv)
{
+ /**
+ @Begin
+ @Entry_point
+ @End
+ */
thrd_t t1, t2;
atomic_init(&mylock.lock, RW_LOCK_BIAS);