| /* 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); |