Piotr Caban (@piotr) commented about dlls/msvcrt/concurrency.c:
new_finished = prev_finished + 1; } while (InterlockedCompareExchange(ptr, new_finished, prev_finished) != prev_finished);
- RtlWakeAddressAll((LONG*)ptr);
Is there a reason for not using RtlWakeAddressSingle here? How about calling RtlWakeAddressAll only if chore->task_collection->finished == chore->task_collection->count?