Skip to content

Commit

Permalink
Auto merge of #110211 - joboet:queue_lock, r=Amanieu
Browse files Browse the repository at this point in the history
Replace pthread `RwLock` with custom implementation

This is one of the last items in #93740. I'm doing `RwLock` first because it is more self-contained and has less tradeoffs to make. The motivation is explained in the documentation, but in short: the pthread rwlock is slow and buggy and `std` can do much better. I considered implementing a parking lot, as was discussed in the tracking issue, but settled for the queue-based version because writing self-balancing binary trees is not fun in Rust...

This is a rather complex change, so I have added quite a bit of documentation to help explain it. Please point out any part that could be explained better.

~~The read performance is really good, I'm getting 4x the throughput of the pthread version and about the same performance as usync/parking_lot on an Apple M1 Max in the usync benchmark suite, but the write performance still falls way behind what usync and parking_lot achieve. I tried using a separate queue lock like what usync uses, but that didn't help. I'll try to investigate further in the future, but I wanted to get some eyes on this first.~~ [Resolved](rust-lang/rust#110211 (comment))

r? `@m-ou-se`
CC `@kprotty`
  • Loading branch information
bors committed Feb 12, 2024
2 parents 9273186 + 21ef223 commit d57bfcc
Showing 0 changed files with 0 additions and 0 deletions.

0 comments on commit d57bfcc

Please sign in to comment.