mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 19:43:32 +00:00
3c61a541bd
This is one of the few POSIX APIs that was missing. It lets you choose a monotonic clock for your condition variables. This might improve perf on some platforms. It might also grant more flexibility with NTP configs. I know Qt is one project that believes it needs this. To introduce this, I needed to change some the *NSYNC APIs, to support passing a clock param. There's also new benchmarks, demonstrating Cosmopolitan's supremacy over many libc implementations when it comes to mutex performance. Cygwin has an alarmingly bad pthread_mutex_t implementation. It is so bad that they would have been significantly better off if they'd used naive spinlocks.
45 lines
1.6 KiB
Text
45 lines
1.6 KiB
Text
DESCRIPTION
|
|
|
|
*NSYNC is a synchronization primitives library.
|
|
|
|
LICENSE
|
|
|
|
Apache 2.0
|
|
|
|
ORIGIN
|
|
|
|
git@github.com:google/nsync
|
|
commit ac5489682760393fe21bd2a8e038b528442412a7
|
|
Author: Mike Burrows <m3b@google.com>
|
|
Date: Wed Jun 1 16:47:52 2022 -0700
|
|
|
|
LOCAL CHANGES
|
|
|
|
- Fix nsync_mu_unlock() on Apple Silicon
|
|
|
|
- Add clock parameter to many NSYNC wait APIs
|
|
|
|
- Time APIs were so good that they're now in libc
|
|
|
|
- Double linked list API was so good that it's now in libc
|
|
|
|
- Support Apple's ulock futexes which are internal but nicer than GCD
|
|
|
|
- Ensure resources such as POSIX semaphores are are released on fork.
|
|
|
|
- Modified *NSYNC to allocate waiter objects on the stack. We need it
|
|
because we use *NSYNC mutexes to implement POSIX mutexes, which are
|
|
too low-level to safely depend on malloc, or even mmap in our case.
|
|
|
|
- Rewrote most of the semaphore and futex system call support code so
|
|
it works well with Cosmopolitan's fat runtime portability. *NSYNC's
|
|
unit test suite passes on all supported platforms. However the BSDs
|
|
currently appear to be overutilizing CPU time compared with others.
|
|
This appears to be the fault of the OSes rather than *NSYNC / Cosmo
|
|
|
|
- Support POSIX thread cancellation. APIs that wait on condition vars
|
|
are now cancellation points. In PTHREAD_CANCEL_MASKED mode they may
|
|
return ECANCELED. In PTHREAD_CANCEL_DEFERRED mode the POSIX threads
|
|
library will unwind the stack to re-acquire locks and free waiters.
|
|
On the other hand the *NSYNC APIs for mutexes will now safely block
|
|
thread cancellation, but you can still use *NSYNC notes to do that.
|