threads, mutual exclusion, and lists

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Scott

    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

  • danmcleran@yahoo.com

    #2
    Re: threads, mutual exclusion, and lists

    On Aug 15, 1:36 pm, Scott <smba...@gmail. comwrote:
    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.

    Comment

    • =?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=

      #3
      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

      Comment

      • Matt McCredie

        #4
        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:


        Matt

        Comment

        • =?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=

          #5
          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

          Comment

          • Matt McCredie

            #6
            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

            Comment

            • =?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=

              #7
              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

              Comment

              Working...