Differences From Artifact [656c95cd33]:
- File src/threading.m — part of check-in [fa79bc173e] at 2016-04-18 21:48:08 on branch trunk — Add of_thread_yield() (user: js, size: 2563) [annotate] [blame] [check-ins using]
To Artifact [7d26f1a4ec]:
- File
src/threading.m
— part of check-in
[0c3e3da576]
at
2016-07-30 23:29:38
on branch trunk
— atomic.h: Use the OSAtomic variant without barrier
This matches what the assembly versions does. However, the __sync_*
versions still use the barrier, but unfortunately, no version without it
is provided. The only way around this would be to use the new __atomic_*
that has been added in GCC 4.7. (user: js, size: 2588) [annotate] [blame] [check-ins using]
| ︙ | |||
28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | + + + |
#ifndef OF_HAVE_PTHREADS
void
of_once(of_once_t *control, void (*func)(void))
{
if (of_atomic_int_cmpswap(control, 0, 1)) {
func();
of_memory_barrier();
of_atomic_int_inc(control);
} else
while (*control == 1)
of_thread_yield();
}
#endif
|
| ︙ |