4 ms·
Lock 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
by ww520 3y ago
Lock 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.