9444d297ed
This commits rewrites the sync logic in a way that the `use_system_threads_for_low_priority_tasks` setting, which was added due to the lack of a cross-platform wait-for-multiple-objects functionality, can be removed (it's as if it was effectively hardcoded to `false`). With the new implementation, we have the best of both worlds: threads don't have to poll, plus no bespoke threads are used. In addition, regarding deadlock prevention, since not every possible case of wait-deadlock could be avoided, this commits removes the current best-effort avoidance mechanisms and keeps only a simple, pessimistic way of detection. It turns out that the only current user of deadlock prevention, ResourceLoader, works fine with it and so every possible situation in resource loading is now properly handled, with no possibilities of deadlocking. There's a comment in the code with further details. Lastly, a potential for load tasks never being awaited/disposed is cleared. |
||
---|---|---|
.. | ||
condition_variable.h | ||
keyboard.cpp | ||
keyboard.h | ||
main_loop.cpp | ||
main_loop.h | ||
memory.cpp | ||
memory.h | ||
midi_driver.cpp | ||
midi_driver.h | ||
mutex.cpp | ||
mutex.h | ||
os.cpp | ||
os.h | ||
pool_allocator.cpp | ||
pool_allocator.h | ||
rw_lock.h | ||
SCsub | ||
semaphore.h | ||
spin_lock.h | ||
thread.cpp | ||
thread.h | ||
thread_safe.cpp | ||
thread_safe.h | ||
time.cpp | ||
time.h | ||
time_enums.h |