9 ms·
Aren't lock free buffers usually just as expensive or more expensive to use as locks.
by liquid153 3y ago
Aren't lock free buffers usually just as expensive or more expensive to use as locks.
- zengid 3y agoNot if your program needs to be realtime or near realtime safe. Locks are controlled by the OS typically, and can have non-deterministic latency.
- loeg 3y agoEven ignoring mutexes and OS scheduling, plain spinlocks add contention that would not otherwise exist in a SPSC ringbuffer. https://news.ycombinator.com/item?id=39551575 https://news.ycombinator.com/item?id=39551575
- CyberDildonics 3y agoNo, where are you getting that information?
- loeg 3y agoNo -- for a lock-free design with a single producer and consumer, it's possible both are typically writing to independent regions of memory. With a lock, both have to write the same cache line to take and release the lock.
- ww520 3y agoLock free has two advantages: the checking code can run in user mode and non-contested access is very cheap with just one instruction. To do it correctly, lock needs to be done in the kernel thus obtaining a lock requires calling into the kernel which is more expensive. I think you meant the memory barrier for syncing cache is just as expensive as the lock version, which is true.
- scaredginger 3y agoObtaining an uncontested lock absolutely doesn't require calling into the kernel
- jcelerier 3y agoHow can you give hard guarantees that on Windows, Mac, Linux with the OS and/or libc provided locks?
- gpderetta 3y agoIf you really really really need such a guarantee, you implement your own. Otherwise you inspect the implementation, but in 2024 a fast-pathed OS lock is table stakes.
- tialaramex 3y agoRust (which is what we're discussing here) actually doesn't promise this in general. But for the three operating systems you mentioned that is in fact what it delivers because as another commenter mentioned it's table stakes. If your OS can't do this it's a toy OS. The Windows and Linux solutions are by Mara Bos (the MacOS one might be too, I don't know) The Windows one is very elegant but opaque. Basically Microsoft provides an appropriate API ("Slim Reader/Writer Locks") and Mara's code just uses that API. The Linux one shows exactly how to use a Futex: if you know what a futex is, yeah, Rust just uses a futex. If you don't, go read about the Futex, it's clever.
- saagarjha 3y agoBecause not doing that these days would be malpractice for an OS of that caliber.