ref: fba678b80d8c266077e12cd43d5e42d3ab6e411c
dir: /cursed.h/
typedef struct Sem Sem;
typedef struct QReq QReq;
struct Sem{
Ref;
int id; // index in array; qid.path
char *name; // of file
int tickets;
QReq *reqs; // reads (i.e., downs) pending
};
struct QReq{
QReq *next; // in pending request list
Req *r; // the request pending
};
#define Nsems 32
extern Sem *sems[];
extern Sem *newsem(char *name);
extern void closesem(Sem *s);
extern void queuereq(Sem *s, Req *r);
extern Req *dequeuereq(Sem *s);
extern int queuedreqs(Sem *s);