SpinLock.cpp 448 B

12345678910111213141516171819202122
  1. #include "core/thread/SpinLock.hpp"
  2. #include <threads.h>
  3. Core::SpinLock::SpinLock() : locked() {
  4. atomic_init(&locked, false);
  5. }
  6. void Core::SpinLock::lock() {
  7. while(true) {
  8. bool expected = false;
  9. if(atomic_compare_exchange_weak(&locked, &expected, true)) {
  10. break;
  11. }
  12. timespec s{0, 0};
  13. thrd_sleep(&s, nullptr);
  14. }
  15. }
  16. void Core::SpinLock::unlock() {
  17. atomic_store(&locked, false);
  18. }