Merge pull request #10 from gunyarakun/fix-invalid-return
[cocotron.git] / objc / objc_lock.h
blob71f8b9326c6db3da29237d29172a40aba67006fb
1 #import <stdbool.h>
2 #include <unistd.h>
4 typedef unsigned int objc_lock;
6 static inline bool objc_lock_try(volatile objc_lock *__lock) {
7 return __sync_bool_compare_and_swap(__lock, 0, 1);
10 static inline void objc_lock_lock(volatile objc_lock *__lock) {
11 while(!__sync_bool_compare_and_swap(__lock, 0, 1)) {
12 #ifdef WIN32
13 Sleep(0);
14 #else
15 usleep(1);
16 #endif
20 static inline void objc_lock_unlock(volatile objc_lock *__lock) {
21 __sync_bool_compare_and_swap(__lock, 1, 0);