| ▲ | VorpalWay 3 hours ago | |||||||||||||
Yeah, you can't enable priority inheritance for mutexes in std of either C++ or Rust. Which is a show stopper for hard realtime (my dayjob). And then you have mutexes internally inside some dependency still (e.g. grpc or what have you). What I would really like is the ability to change defaults for all mutexes created in the program, and have everyone use the same std mutexes. By the way: rwlocks are often a bad idea, since you still get cache contention between readers on the counter for number of active readers. Unless the time you hold the lock for is really long (several milliseconds at least) it usually doesn't improve performance compared to mutexes. Consider alternatives like seqlocks, RCU, hazard pointers etc instead, depending on the specifics of your situation (there is no silver bullet when it comes to performance in concurrent primtitves). | ||||||||||||||
| ▲ | loeg 13 minutes ago | parent | next [-] | |||||||||||||
> What I would really like is the ability to change defaults for all mutexes created in the program, and have everyone use the same std mutexes. Yes. I imagine subbing out a debug mutex implementation that tracks lock ordering and warns about order inversion (similar to things like witness(4)): https://man.freebsd.org/cgi/man.cgi?witness(4) > rwlocks are often a bad idea Yes. > since you still get cache contention between readers on the counter for number of active readers There are rwlock impls that put the reader counts on distinct cache lines per core, or something like that (e.g., folly::SharedMutex), mitigating this particular problem. But it isn't the only problem with rwlocks. > Consider alternatives like seqlocks, RCU, hazard pointers etc instead, depending on the specifics of your situation (there is no silver bullet when it comes to performance in concurrent primtitves). Yes. :) | ||||||||||||||
| ▲ | jcalvinowens 2 hours ago | parent | prev [-] | |||||||||||||
> What I would really like is the ability to change defaults for all mutexes created in the program, and have everyone use the same std mutexes. Assuming you're building the whole userspace at once with something like yocto... you can just patch pthread to change the default to PTHREAD_PRIO_INHERIT and silently ignore attempts to set it to PTHREAD_PRIO_NONE. It's a little evil though. > By the way: rwlocks are often a bad idea +1 | ||||||||||||||
| ||||||||||||||