Charles-François Natali added the comment:

> The page also mentions a seqlock which looks interesting to me as
> it's fast for few writers with lots of readers.

A seqlock is suitable for consistent views of simple data structures (e.g. a 
counter in the Linux kernel), but it won't fly for a high-level language like 
Python.
The problem is that, despite its name, it's not a lock, but it's based on 
retries, which means that:
- the critical section must be idempotent (no side effect like incrementing a 
variable, or crediting a bank account :-)
- your critical section is simple enough so that it can tolerate inconsistent 
views, e.g.:

with seqlock.rlock():
    z = 1/(x-y)

if the writer threads make sure that x!=y when they hold the seqlock, you can 
still, if you're unlucky, fall at the wrong time and x==y, then you get a nice 
ZeroDivisionError.

(And yes, you have the same kind of issues with transational memory, as well as 
others...).


Otherwise, having a rwlock would be a nice addition, but since the GIL 
serializes everything anyway, this isn't likely to benefit many situations 
(unless you do I/O, of course), on CPython at least.
That's why it's definitely important to have the equivalent for multiprocessing.

Also, I prefer reader-writer lock because that's how everyone calls it (not 
only POSIX), and RWLock looks better than SELock (well, at least to me).

----------
nosy: +neologix

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue8800>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to