![]() * config/linux/wait.h (do_spin): New inline, largely copied from do_wait, just don't do futex_wait here, instead return true if it should be done. (do_wait): Implement using do_spin. * config/linux/mutex.h (gomp_mutex_lock_slow): Add an int argument to prototype. (gomp_mutex_lock): Use __sync_val_compare_and_swap instead of __sync_bool_compare_and_swap, pass the oldval to gomp_mutex_lock_slow. * config/linux/mutex.c (gomp_mutex_lock_slow): Add oldval argument. If all mutex contenders are just spinning and not sleeping, don't change state to 2 unnecessarily. Optimize the loop when state has already become 2 to use just one atomic operation per loop instead of two. * config/linux/ia64/mutex.h (gomp_mutex_lock_slow): Add an int argument to prototype. (gomp_mutex_lock): Use __sync_val_compare_and_swap instead of __sync_bool_compare_and_swap, pass the oldval to gomp_mutex_lock_slow. From-SVN: r176326 |
||
---|---|---|
.. | ||
config | ||
testsuite | ||
acinclude.m4 | ||
aclocal.m4 | ||
alloc.c | ||
barrier.c | ||
ChangeLog | ||
ChangeLog.graphite | ||
config.h.in | ||
configure | ||
configure.ac | ||
configure.tgt | ||
critical.c | ||
env.c | ||
error.c | ||
fortran.c | ||
iter.c | ||
iter_ull.c | ||
libgomp.h | ||
libgomp.map | ||
libgomp.spec.in | ||
libgomp.texi | ||
libgomp_f.h.in | ||
libgomp_g.h | ||
loop.c | ||
loop_ull.c | ||
Makefile.am | ||
Makefile.in | ||
omp.h.in | ||
omp_lib.f90.in | ||
omp_lib.h.in | ||
ordered.c | ||
parallel.c | ||
sections.c | ||
single.c | ||
task.c | ||
team.c | ||
work.c |