On Mon, 22 Sep 2025 10:54:15 GMT, Viktor Klang <[email protected]> wrote:
>> Doug Lea has updated the pull request incrementally with one additional
>> commit since the last revision:
>>
>> Add @Contended WorkQueue region. Adapt accordingly.
>
> src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java line 2030:
>
>> 2028: int idle = 1;
>> 2029: if (w != null) { // always true; hoist
>> checks
>> 2030: int activePhase = (w.phase += IDLE) + IDLE; // advance
>
> This will add IDLE twice to activePhase?
Made less confusing by breaking into:
int inactivePhase = w.phase |= IDLE; // set status
int activePhase = inactivePhase + IDLE; // phase value when
reactivated
> src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java line 2034:
>
>> 2032: do { // enqueue
>> 2033: qc = ap | ((pc - RC_UNIT) & UMASK);
>> 2034: w.stackPred = (int)pc; // set ctl stack link
>
> Is it worth updating w.stackPred every time before a failing CAS of pc, qc?
> Is the intent to flush that change when the CAS succeeds?
We need to write stackPred before each CAS attempt to avoid data race when
signalling
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/26479#discussion_r2367966760
PR Review Comment: https://git.openjdk.org/jdk/pull/26479#discussion_r2367976091