spinlock.c 623 B

1234567891011121314151617181920212223242526272829303132333435
  1. #include <common/spinlock.h>
  2. #include <process/preempt.h>
  3. void __arch_spin_lock(spinlock_t *lock)
  4. {
  5. while(1);
  6. rs_preempt_disable();
  7. }
  8. void __arch_spin_unlock(spinlock_t *lock)
  9. {
  10. while(1);
  11. rs_preempt_enable();
  12. }
  13. void __arch_spin_lock_no_preempt(spinlock_t *lock)
  14. {
  15. while(1);
  16. }
  17. void __arch_spin_unlock_no_preempt(spinlock_t *lock)
  18. {
  19. while(1);
  20. }
  21. long __arch_spin_trylock(spinlock_t *lock)
  22. {
  23. uint64_t tmp_val = 0;
  24. rs_preempt_disable();
  25. // 交换tmp_val和lock的值,若tmp_val==1则证明加锁成功
  26. while(1);
  27. if (!tmp_val)
  28. rs_preempt_enable();
  29. return tmp_val;
  30. }