70 lines
		
	
	
		
			1020 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1020 B
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * Copyright (c) 2006-2018, RT-Thread Development Team
 | 
						|
 *
 | 
						|
 * SPDX-License-Identifier: Apache-2.0
 | 
						|
 *
 | 
						|
 * Change Logs:
 | 
						|
 * Date           Author       Notes
 | 
						|
 * 2010-10-26     Bernard      the first version
 | 
						|
 */
 | 
						|
 | 
						|
#include <pthread.h>
 | 
						|
 | 
						|
int pthread_spin_init (pthread_spinlock_t *lock, int pshared)
 | 
						|
{
 | 
						|
    if (!lock)
 | 
						|
        return EINVAL;
 | 
						|
 | 
						|
    lock->lock = 0;
 | 
						|
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
int pthread_spin_destroy (pthread_spinlock_t *lock)
 | 
						|
{
 | 
						|
    if (!lock)
 | 
						|
        return EINVAL;
 | 
						|
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
int pthread_spin_lock (pthread_spinlock_t *lock)
 | 
						|
{
 | 
						|
    if (!lock)
 | 
						|
        return EINVAL;
 | 
						|
 | 
						|
    while (!(lock->lock))
 | 
						|
    {
 | 
						|
        lock->lock = 1;
 | 
						|
    }
 | 
						|
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
int pthread_spin_trylock (pthread_spinlock_t *lock)
 | 
						|
{
 | 
						|
    if (!lock)
 | 
						|
        return EINVAL;
 | 
						|
 | 
						|
    if (!(lock->lock))
 | 
						|
    {
 | 
						|
        lock->lock = 1;
 | 
						|
 | 
						|
        return 0;
 | 
						|
    }
 | 
						|
 | 
						|
    return EBUSY;
 | 
						|
}
 | 
						|
 | 
						|
int pthread_spin_unlock (pthread_spinlock_t *lock)
 | 
						|
{
 | 
						|
    if (!lock)
 | 
						|
        return EINVAL;
 | 
						|
    if (!(lock->lock))
 | 
						|
        return EPERM;
 | 
						|
 | 
						|
    lock->lock = 0;
 | 
						|
 | 
						|
    return 0;
 | 
						|
}
 |