On Sep 13, 2019, at 10:11, Richard Musil <risa20...@gmail.com> wrote:
> 
> For the atomic operations the lock is on the hardware level (i.e. implemented 
> in the CPU, across the mem BUS, cache, etc.), from the user perspective, it 
> looks only like executing a particular (atomic) op-code. 
> (https://software.intel.com/en-us/node/506090).
> 
> Compared to the "Lock" which is an OS implementation (which possibly uses the 
> hardware atomic operations internally), but is far more heavy, because it can 
> block the thread. An atomic operation cannot.

I think you’re mixing up two levels here.

A lock doesn’t have to just be a kernel lock object, and usually isn’t—usually 
you’d implement it with an atomic counter, and then only fall back to the 
kernel lock when you detect contention (the atomic compare-exchange failed or 
compare-increment returned 2 instead of 1). And you may even sleep-lock or 
spin-lock a few times before falling back to the kernel. So, when there’s not 
high contention, it’s not actually heavy.

It is, however, obviously not lock-free. If you’re building systems that need 
to guarantee progress for all threads at all time, locks make that difficult.

But the tradeoff is that locks are a lot easier to tune, and to compose, than 
atomic operations. For example, if you want to keep a dozen values in sync, so 
everyone sees either version N or all of them or version N+1 of all of them, 
that’s trivial with locks (just grab a single lock around all dozen updates), 
but a big pain, and very easy to get wrong, with atomic operations.

Of course even locks aren’t friendly to compose, just less unfriendly than 
atomics. For an extreme (but not uncommon) example, let’s say you also need to 
guarantee that a failing process can only update all 12 values or none of them. 
But that the proposed mp.AtomicValue wouldn’t help there either.
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/NCA3IYNLRY6SU3H744DNNBFATATJXO7B/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to