Fastlock fixes
This commit is contained in:
parent
c4dbc557eb
commit
988ea40101
@ -1,19 +1,23 @@
|
||||
#include "fastlock.h"
|
||||
#include <unistd.h>
|
||||
|
||||
extern "C" void fastlock_init(struct fastlock *lock)
|
||||
{
|
||||
lock->lock = 0;
|
||||
lock->m_lock = 0;
|
||||
}
|
||||
|
||||
extern "C" void fastlock_lock(struct fastlock *lock)
|
||||
{
|
||||
while (!__sync_bool_compare_and_swap(&lock->lock, 0, 1));
|
||||
while (!__sync_bool_compare_and_swap(&lock->m_lock, 0, 1))
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void fastlock_unlock(struct fastlock *lock)
|
||||
{
|
||||
lock->lock = 0;
|
||||
__sync_bool_compare_and_swap(&lock->m_lock, 1, 0);
|
||||
}
|
||||
|
||||
extern "C" void fastlock_free(struct fastlock *lock)
|
||||
{
|
||||
// NOP
|
||||
|
@ -4,16 +4,31 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct fastlock
|
||||
{
|
||||
int lock;
|
||||
};
|
||||
|
||||
/* Begin C API */
|
||||
struct fastlock;
|
||||
void fastlock_init(struct fastlock *lock);
|
||||
void fastlock_lock(struct fastlock *lock);
|
||||
void fastlock_unlock(struct fastlock *lock);
|
||||
void fastlock_free(struct fastlock *lock);
|
||||
|
||||
/* End C API */
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
struct fastlock
|
||||
{
|
||||
int m_lock;
|
||||
|
||||
#ifdef __cplusplus
|
||||
void lock()
|
||||
{
|
||||
fastlock_lock(this);
|
||||
}
|
||||
|
||||
void unlock()
|
||||
{
|
||||
fastlock_unlock(this);
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user