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/ -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple