/* Copyright (c) 2013 The Regents of the University of California
 * Barret Rhoden <brho@cs.berkeley.edu>
 * See LICENSE for details.
 *
 * Reader-writer queue locks (sleeping locks).
 *
 * Readers favor readers; writers favor writers.  Check out rwlock.c for more
 * info.
 *
 * One consequence of this: "if some reader holds a rwlock, then any other
 * thread (including itself) can get an rlock". */

#pragma once

#include <ros/common.h>
#include <kthread.h>
#include <atomic.h>

struct rwlock {
	spinlock_t					lock;
	atomic_t					nr_readers;
	bool						writing;
	struct cond_var				readers;
	struct cond_var				writers;
};
typedef struct rwlock rwlock_t;

void rwinit(struct rwlock *rw_lock);
void rlock(struct rwlock *rw_lock);
bool canrlock(struct rwlock *rw_lock);
void runlock(struct rwlock *rw_lock);
void wlock(struct rwlock *rw_lock);
void wunlock(struct rwlock *rw_lock);
