12345678910111213141516171819202122 |
- #include "core/thread/SpinLock.hpp"
- #include <threads.h>
- Core::SpinLock::SpinLock() : locked() {
- atomic_init(&locked, false);
- }
- void Core::SpinLock::lock() {
- while(true) {
- bool expected = false;
- if(atomic_compare_exchange_weak(&locked, &expected, true)) {
- break;
- }
- timespec s{0, 0};
- thrd_sleep(&s, nullptr);
- }
- }
- void Core::SpinLock::unlock() {
- atomic_store(&locked, false);
- }
|