rwsem.c 710 B

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