RFR: 8200697: Add utility for spin wait with fallback to yield/sleep (original) (raw)

David Holmes david.holmes at oracle.com
Wed Apr 4 23:42:50 UTC 2018


Hi Kim,

If this works you for then by all means use it.

Whether it is useful as a general utility is something I am doubtful of. Degrading spin-loops are put in for performance reasons and generally have to interact with surrounding code that captures exactly what is being waited upon. There is also the issue of thread-state transitions that need to be carefully managed.

Cheers, David

On 5/04/2018 4:53 AM, Kim Barrett wrote:

Please review this addition of SpinYield utility class.

It initially supplies a very simple policy: spin a configured number of times, then switch to yielding or (eventually) sleeping. Other policies may replace this one or be provided as alternatives in the future. This is joint work with Robbin Ehn. Robbin and I have immediate uses for this utility in changes we are developing. In addition, there are some existing places that might be converted to use this utility (or perhaps some extended version of it), including SafepointSynchronize::begin, ReadStableMark, Thread::SpinAcquire, and ParallelTaskTerminator::offertermination. Those existing potential uses are not being changed here; for now, we're just adding the utility in support of our in-development changes. We plan to file followup RFEs to consider converting those potential uses. CR: https://bugs.openjdk.java.net/browse/JDK-8200697 Webrev: http://cr.openjdk.java.net/~kbarrett/8200697/open.00/ Testing: Added unit test of basic functionality. Build and hs-tier1 (for gtest) on all Oracle platforms.



More information about the hotspot-dev mailing list