123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- #ifndef _SYNCH_H_
- #define _SYNCH_H_
- #include <spinlock.h>
- struct semaphore {
- char *sem_name;
- struct wchan *sem_wchan;
- struct spinlock sem_lock;
- volatile int sem_count;
- };
- struct semaphore *sem_create(const char *name, int initial_count);
- void sem_destroy(struct semaphore *);
- void P(struct semaphore *);
- void V(struct semaphore *);
- struct lock {
- char *lk_name;
-
-
- };
- struct lock *lock_create(const char *name);
- void lock_acquire(struct lock *);
- void lock_release(struct lock *);
- bool lock_do_i_hold(struct lock *);
- void lock_destroy(struct lock *);
- struct cv {
- char *cv_name;
-
-
- };
- struct cv *cv_create(const char *name);
- void cv_destroy(struct cv *);
- void cv_wait(struct cv *cv, struct lock *lock);
- void cv_signal(struct cv *cv, struct lock *lock);
- void cv_broadcast(struct cv *cv, struct lock *lock);
- #endif
|