![]() |
threads, mutual exclusion, and lists
I have two threads that share a python list. One thread adds to the
list with append(), the other thread removes items with pop(). My question is -- are python list operations atomic? If they are not, then I assume I need to put some mutual exclusion around the append() and pop() calls ? Thanks, Scott |
Re: threads, mutual exclusion, and lists
On Aug 15, 1:36 pm, Scott <smba...@gmail.com> wrote:
> I have two threads that share a python list. One thread adds to the > list with append(), the other thread removes items with pop(). > > My question is -- are python list operations atomic? If they are not, > then I assume I need to put some mutual exclusion around the append() > and pop() calls ? > > Thanks, > Scott You might want to consider using a Queue instead. It is designed to be thread-safe. |
Re: threads, mutual exclusion, and lists
> I have two threads that share a python list. One thread adds to the
> list with append(), the other thread removes items with pop(). > > My question is -- are python list operations atomic? Yes, they are in the current implementation of CPython (all versions). Notice that not *all* operations are atomic (e.g. .sort() is not), but both append and pop happen to be atomic (which is primarily because they don't need to call back to user-defined functions, unlike sort). It's not a language property, though; things may be different in Jython or IronPython. Regards, Martin |
Re: threads, mutual exclusion, and lists
> My question is -- are python list operations atomic? If they are not,
> then I assume I need to put some mutual exclusion around the append() > and pop() calls ? They are not, but there is one included in the standard library: http://docs.python.org/dev/lib/module-Queue.html Matt |
Re: threads, mutual exclusion, and lists
>> My question is -- are python list operations atomic? If they are not,
>> then I assume I need to put some mutual exclusion around the append() >> and pop() calls ? > > They are not, but there is one included in the standard library: > http://docs.python.org/dev/lib/module-Queue.html Why do you think they are not? Regards, Martin |
Re: threads, mutual exclusion, and lists
> Why do you think they are not?
Because they aren't. You even mentioned that a few operations that aren't atomic. If operations are atomic it isn't necessarily because of the design of the list, but the design of CPython. More specifically the GIL. I don't mean to imply that you can't get a multi-threaded app to communicate using lists, but the Queue is explicitly built for it and better suited. Matt |
Re: threads, mutual exclusion, and lists
>> Why do you think they are not?
> > Because they aren't. You even mentioned that a few operations that > aren't atomic. OTOH, the OP specifically asked for .append() and .pop(), which are atomic. Regards, Martin |
| All times are GMT. The time now is 10:35 AM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.