1 #include "lsl_protos.h"
4 #define RW_LOCK_BIAS TUNELOCK
6 /** Example implementation of linux rw lock along with 2 thread test
9 typedef struct rwlock {
14 void lock_init(rwlock_t *lock) {
15 lock->lock=RW_LOCK_BIAS;
18 int add(int * ptr, int val) {
19 return lsl_add_32(ptr, val);
22 int sub(int * ptr, int val) {
23 return lsl_add_32(ptr, -val);
26 int write_trylock(rwlock_t *rw) {
27 int priorvalue=sub(&rw->lock, RW_LOCK_BIAS);
29 int flag=priorvalue != RW_LOCK_BIAS;
32 add(&rw->lock, RW_LOCK_BIAS);
39 void write_unlock(rwlock_t *rw) {
40 add(&rw->lock, RW_LOCK_BIAS);
43 void foo(rwlock_t *mylock) {
44 int flag=write_trylock(mylock);
50 void bar(rwlock_t *mylock) {
51 for(int i=0;i<PROBLEMSIZE;i++)