123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #include "pthread.h"
- #include "implement.h"
- int
- pthread_spin_unlock (pthread_spinlock_t * lock)
- {
- register pthread_spinlock_t s;
- if (NULL == lock || NULL == *lock)
- {
- return (EINVAL);
- }
- s = *lock;
- if (s == PTHREAD_SPINLOCK_INITIALIZER)
- {
- return EPERM;
- }
- switch ((long)
- PTE_ATOMIC_COMPARE_EXCHANGE (&(s->interlock),
- PTE_SPIN_UNLOCKED,
- PTE_SPIN_LOCKED))
- {
- case PTE_SPIN_LOCKED:
- return 0;
- case PTE_SPIN_UNLOCKED:
- return EPERM;
- case PTE_SPIN_USE_MUTEX:
- return pthread_mutex_unlock (&(s->u.mutex));
- }
- return EINVAL;
- }
|