Overview
Comment: | Add of_thread_yield() |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
fa79bc173ef8193b3f827c95e2c63fd2 |
User & Date: | js on 2016-04-18 21:48:08 |
Other Links: | manifest | tags |
Context
2016-04-23
| ||
09:43 | Never end enums with a comma check-in: 3572e824c6 user: js tags: trunk | |
2016-04-18
| ||
21:48 | Add of_thread_yield() check-in: fa79bc173e user: js tags: trunk | |
21:40 | Move of_once() to threading.m check-in: 3f31bd034d user: js tags: trunk | |
Changes
Modified src/threading.h from [b27d0410b9] to [adb5774a4e].
︙ | ︙ | |||
169 170 171 172 173 174 175 176 177 178 179 180 181 182 | return !pthread_key_delete(key); #elif defined(OF_WINDOWS) return TlsFree(key); #else # error of_tlskey_free not implemented! #endif } static OF_INLINE bool of_spinlock_new(of_spinlock_t *spinlock) { #if defined(OF_HAVE_ATOMIC_OPS) *spinlock = 0; return true; | > > > > > > > > > > | 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 | return !pthread_key_delete(key); #elif defined(OF_WINDOWS) return TlsFree(key); #else # error of_tlskey_free not implemented! #endif } static OF_INLINE void of_thread_yield(void) { #if defined(OF_HAVE_SCHED_YIELD) sched_yield(); #elif defined(OF_WINDOWS) Sleep(0); #endif } static OF_INLINE bool of_spinlock_new(of_spinlock_t *spinlock) { #if defined(OF_HAVE_ATOMIC_OPS) *spinlock = 0; return true; |
︙ | ︙ | |||
199 200 201 202 203 204 205 | #endif } static OF_INLINE bool of_spinlock_lock(of_spinlock_t *spinlock) { #if defined(OF_HAVE_ATOMIC_OPS) | < < | < < < < < < | 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 | #endif } static OF_INLINE bool of_spinlock_lock(of_spinlock_t *spinlock) { #if defined(OF_HAVE_ATOMIC_OPS) size_t i; for (i = 0; i < OF_SPINCOUNT; i++) if (of_spinlock_trylock(spinlock)) return true; while (!of_spinlock_trylock(spinlock)) of_thread_yield(); return true; #elif defined(OF_HAVE_PTHREAD_SPINLOCKS) return !pthread_spin_lock(spinlock); #else return of_mutex_lock(spinlock); #endif |
︙ | ︙ |
Modified src/threading.m from [acfd94987f] to [656c95cd33].
︙ | ︙ | |||
29 30 31 32 33 34 35 | #ifndef OF_HAVE_PTHREADS void of_once(of_once_t *control, void (*func)(void)) { if (of_atomic_int_cmpswap(control, 0, 1)) { func(); of_atomic_int_inc(control); | | < | < < < < < < | 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #ifndef OF_HAVE_PTHREADS void of_once(of_once_t *control, void (*func)(void)) { if (of_atomic_int_cmpswap(control, 0, 1)) { func(); of_atomic_int_inc(control); } else while (*control == 1) of_thread_yield(); } #endif #if !defined(OF_HAVE_RECURSIVE_PTHREAD_MUTEXES) && !defined(OF_WINDOWS) bool of_rmutex_new(of_rmutex_t *rmutex) { |
︙ | ︙ |