SRW locks
Bruno Haible
bruno@clisp.org
Thu May 30 13:53:51 GMT 2024
Noel Grandin wrote:
> > Still: Does ReleaseSRWLockExclusive notify other threads?
> >
>
> Of course? How else would a lock work, it must release other waiters?
>
> It might not be a fair lock though, which is not a problem for this situation, which does not require fair locking.
>
>
> > Functionally, the INIT_ONCE looks interesting. But, like Takashi Yano mentioned,
> > how would you make it fit into a pthread_once_t that is defined as
> > struct { pthread_mutex_t mutex; int state; }
> > ?
>
> Something like:
>
> struct once {
> union {
> pthread_mutex_t old_mutex_field_for_size_compatibility;
> SRWLOCK lock = SRWLOCK_INIT;
> };
> int state;
> };
Reading [1], it seems that this might indeed work, and be faster than code
that uses CRITICAL_SECTIONs.
Still, something to watch out is this bug [2].
All in all, I would say that every such change ought to be tested with a
nontrivial test program that performs several thousands of rounds.
Bruno
[1] https://marabos.nl/atomics/os-primitives.html
[2] https://old.reddit.com/r/cpp/comments/1b55686/maybe_possible_bug_in_stdshared_mutex_on_windows/
More information about the Cygwin
mailing list