3 ms·
I think I'm not doing a great job of explaining it. There are three states of the mutex: locked=1, unlocked=0, and sleeping=2. A thread comes along to a locked
by wbl 2y ago
I think I'm not doing a great job of explaining it.
There are three states of the mutex: locked=1, unlocked=0, and sleeping=2. A thread comes along to a locked mutex, and atomically moves it to sleeping and sleeps via futex. The freeing thread unconditionally writes 0 and atomically sees the old value: if 2 wake all, if 1 no need to wake anybody.
Maybe that is equally expensive to a CAS, but I don't think it ultimately is.
- pizlonator 2y ago“Atomically sees the old value” means you’re doing an atomic RMW, which is more expensive than just a store with a release fence. Atomic RMW is almost as expensive as CAS. Exactly as expensive as CAS on some cpus.