Since on Apple systems `ulock` also provides futex-like semantics and performs better than both `kqueue/kevent` and the existing mach semaphore implementation, I added it to this MR as well.
Hopefully this is alright, if it should be in another separate MR, just let me know!