rwsem.c 674 B

1234567891011121314151617181920212223242526272829303132
  1. #include "util.h"
  2. #include "rwsem.h"
  3. int init_rwsem(struct rw_semaphore *sem)
  4. {
  5. return pthread_rwlock_init(&sem->lock, NULL);
  6. }
  7. int exit_rwsem(struct rw_semaphore *sem)
  8. {
  9. return pthread_rwlock_destroy(&sem->lock);
  10. }
  11. int down_read(struct rw_semaphore *sem)
  12. {
  13. return perf_singlethreaded ? 0 : pthread_rwlock_rdlock(&sem->lock);
  14. }
  15. int up_read(struct rw_semaphore *sem)
  16. {
  17. return perf_singlethreaded ? 0 : pthread_rwlock_unlock(&sem->lock);
  18. }
  19. int down_write(struct rw_semaphore *sem)
  20. {
  21. return perf_singlethreaded ? 0 : pthread_rwlock_wrlock(&sem->lock);
  22. }
  23. int up_write(struct rw_semaphore *sem)
  24. {
  25. return perf_singlethreaded ? 0 : pthread_rwlock_unlock(&sem->lock);
  26. }