#include #include #include typedef struct rw_lock{ atomic_int reader_count; sem_t writer_semaphore; } rw_lock_t; void write_lock(rw_lock_t *l){ sem_wait(&l->writer_semaphore); } void write_unlock(rw_lock_t *l){ sem_post(&l->writer_semaphore); } void read_lock(rw_lock_t *l){ if (atomic_fetch_add(&l->reader_count,1) == 0) //is this racy? Let's think! write_lock(l); } void read_unlock(rw_lock_t *l){ if (atomic_fetch_add(&l->reader_count,-1) == 0) //is this racy? Let's think! write_unlock(l); } typedef struct rw_lock_writer{ } rw_lock_writer_t ; int main(){ }