On 9/11/07, Greg Ewing <[EMAIL PROTECTED]> wrote:
>
> Guido van Rossum wrote:
> > Any number of concurrent SIMPLE accesses can
> > coexist since the clients promise they will only read.
>
> As a general principle, using a word like SIMPLE in an
> API is a really bad idea imo, as it's far too vague.
> I'm finding it impossible to evaluate the truthfulness
> of statements like the above in this discussion, because
> of that.


+1 on that. SIMPLE is a bad name.  Based on the pep3118 description, how
about calling it 1D_CONTIGUOUS or just RAW or FLAT?

I also like your suggestion of renaming PyBUF api flags to READ_LOCK and
WRITE_LOCK as those are well defined concepts in the classic multiple
readers or one writer synchronization sense.  What I implemented in my bytes
patch should really be called PyBUF_READ_LOCK and what Travis describes as
LOCKDATA in this email thread should become WRITE_LOCK.

> basic read access (I can read, others can read or write)
> > locked read access (I can read, others can only read)
> > basic write access (I can read and write, others can read or write)
> > exclusive write access (I can read and write, no others can read or
> write)
>
> Should that last one perhaps be "I can read and write,
> others can only read"?
>
> Another thread wanting to read but get a stable view
> of the data will be using "I can read, others can only read",
> which will fail because the first one is writing. If the
> reading thread doesn't care about stability, the writing
> one shouldn't have to know.
>
> Then we have two orthogonal things: READ vs WRITE, and
> SHARED vs EXCLUSIVE (where 'exclusive' means that others
> are excluded from writing).


When I read the plain term EXCLUSIVE I read that to mean nobody else can
read -or- write, ie: not shared in any sense.  Lets extend these base
concepts to SHARED_READ, SHARED_WRITE, EXCLUSIVE_READ, EXCLUSIVE_WRITE and
use them to define the more others:

EXCLUSIVE_WRITE - no others write to the buffer while this view is open
(this does *not* imply that the requester wants to actually write, thats
what the WRIT(E)ABLE flag is for)
EXCLUSIVE_READ - no others can read this buffer while this view is open.
(this is only useful in conjunction with exclusive write below to make a
write_lock).
SHARED_READ - anyone can read this buffer
SHARED_WRITE - anyone can write this buffer

SIMPLE/FLAT/RAW = SHARED_WRITE | SHARED_READ
READ_LOCK = EXCLUSIVE_WRITE | SHARED_READ
WRITE_LOCK = EXCLUSIVE_WRITE | EXCLUSIVE_READ

Just | any of the above with WRIT(E)ABLE if you intend to actually write to
the buffer.

-gps
_______________________________________________
Python-3000 mailing list
Python-3000@python.org
http://mail.python.org/mailman/listinfo/python-3000
Unsubscribe: 
http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com

Reply via email to