1
0

pthread_spin.c 736 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include <pthread.h>
  2. int pthread_spin_init (pthread_spinlock_t *lock, int pshared)
  3. {
  4. if (!lock) return EINVAL;
  5. lock->lock = 0;
  6. return 0;
  7. }
  8. int pthread_spin_destroy (pthread_spinlock_t *lock)
  9. {
  10. if (!lock) return EINVAL;
  11. return 0;
  12. }
  13. int pthread_spin_lock (pthread_spinlock_t *lock)
  14. {
  15. if (!lock) return EINVAL;
  16. while (!(lock->lock))
  17. {
  18. lock->lock = 1;
  19. }
  20. return 0;
  21. }
  22. int pthread_spin_trylock (pthread_spinlock_t *lock)
  23. {
  24. if (!lock) return EINVAL;
  25. if (!(lock->lock))
  26. {
  27. lock->lock = 1;
  28. return 0;
  29. }
  30. return EBUSY;
  31. }
  32. int pthread_spin_unlock (pthread_spinlock_t *lock)
  33. {
  34. if (!lock) return EINVAL;
  35. if (!(lock->lock)) return EPERM;
  36. lock->lock = 0;
  37. return 0;
  38. }