This allows *BSDs to also have a fast path similar to futexes for thread-ID alerts.
Also a kevent with `EV_CLEAR` and `NOTE_TRIGGER` maps perfectly to the thread alertable state, fixing the issue of the current mach-semaphore implementation not correctly waiting in the test case below:
```
NtAlertThreadByThreadId((HANDLE)GetCurrentThreadId());
NtAlertThreadByThreadId((HANDLE)GetCurrentThreadId());
NtWaitForAlertByThreadId(NULL, NULL);
NtWaitForAlertByThreadId(NULL, NULL);
```
I took the liberty to remove this mach semaphore implementation, since all versions of OSX have supported kqueue().
--
v5: ntdll: Implement thread-ID alerts using ulock.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4049
This is a continuation to !406. With this MR all the tests pass on Windows. [The next step is to allow the CI to run crosstests on Windows](https://gitlab.winehq.org/giomasce/vkd3d/-/commits/ci3).
--
v2: tests: Skip processing resources according to [require] directives.
tests: Do not test matrix majority on SM1-3.
tests: Fix the usage of require directives.
tests: Remove an irrelevant input from a test.
tests: Do not test integral types for SM1-3.
tests: Do not use global half values.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/412
Fixes a hang when joining a multiplayer game in Burnout Paradise Remastered. The game expects to find a space in the device name and spins forever trying if it can't.
--
v2: winepulse.drv: Change device description to "PulseAudio Device".
https://gitlab.winehq.org/wine/wine/-/merge_requests/4096