src/os/aix/vm/os_aix.cpp

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright 2012, 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as --- 1,7 ---- /* ! * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. * Copyright 2012, 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as
*** 2827,2848 **** sched_yield(); } os::YieldResult os::NakedYield() { sched_yield(); return os::YIELD_UNKNOWN; } ! void os::yield_all(int attempts) { // Yields to all threads, including threads with lower priorities // Threads on Linux are all with same priority. The Solaris style // os::yield_all() with nanosleep(1ms) is not necessary. sched_yield(); } - // Called from the tight loops to possibly influence time-sharing heuristics - void os::loop_breaker(int attempts) { - os::yield_all(attempts); - } - //////////////////////////////////////////////////////////////////////////////// // thread priority support // From AIX manpage to pthread_setschedparam // (see: http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp? --- 2827,2843 ---- sched_yield(); } os::YieldResult os::NakedYield() { sched_yield(); return os::YIELD_UNKNOWN; } ! void os::yield_all() { // Yields to all threads, including threads with lower priorities // Threads on Linux are all with same priority. The Solaris style // os::yield_all() with nanosleep(1ms) is not necessary. sched_yield(); } //////////////////////////////////////////////////////////////////////////////// // thread priority support // From AIX manpage to pthread_setschedparam // (see: http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?
*** 3095,3105 **** // managed to send the signal and switch to SUSPEND_REQUEST, now wait for SUSPENDED for (int n = 0; !osthread->sr.is_suspended(); n++) { for (int i = 0; i < RANDOMLY_LARGE_INTEGER2 && !osthread->sr.is_suspended(); i++) { ! os::yield_all(i); } // timeout, try to cancel the request if (n >= RANDOMLY_LARGE_INTEGER) { os::SuspendResume::State cancelled = osthread->sr.cancel_suspend(); --- 3090,3100 ---- // managed to send the signal and switch to SUSPEND_REQUEST, now wait for SUSPENDED for (int n = 0; !osthread->sr.is_suspended(); n++) { for (int i = 0; i < RANDOMLY_LARGE_INTEGER2 && !osthread->sr.is_suspended(); i++) { ! os::yield_all(); } // timeout, try to cancel the request if (n >= RANDOMLY_LARGE_INTEGER) { os::SuspendResume::State cancelled = osthread->sr.cancel_suspend();
*** 3129,3139 **** while (!osthread->sr.is_running()) { if (sr_notify(osthread) == 0) { for (int n = 0; n < RANDOMLY_LARGE_INTEGER && !osthread->sr.is_running(); n++) { for (int i = 0; i < 100 && !osthread->sr.is_running(); i++) { ! os::yield_all(i); } } } else { ShouldNotReachHere(); } --- 3124,3134 ---- while (!osthread->sr.is_running()) { if (sr_notify(osthread) == 0) { for (int n = 0; n < RANDOMLY_LARGE_INTEGER && !osthread->sr.is_running(); n++) { for (int i = 0; i < 100 && !osthread->sr.is_running(); i++) { ! os::yield_all(); } } } else { ShouldNotReachHere(); }