title: Are Python instance variables thread-safe?
body: <p>OK, check following codes first:</p>
  
  <pre><code>class DemoClass():
  
      def __init__(self):
          #### I really want to know if self.Counter is thread-safe. 
          self.Counter = 0
  
      def Increase(self):
          self.Counter = self.Counter + 1
  
      def Decrease(self):
          self.Counter = self.Counter - 1
  
      def DoThis(self):
          while True:
              Do something
  
              if A happens:
                  self.Increase()
              else:
                  self.Decrease()
  
              time.sleep(randomSecs)
  
      def DoThat(self):
          while True:
              Do other things
  
              if B happens:
                  self.Increase()
              else:
                  self.Decrease()
  
              time.sleep(randomSecs)
  
      def ThreadSafeOrNot(self):
          InterestingThreadA = threading.Thread(target = self.DoThis, args = ())
          InterestingThreadA.start()
  
          InterestingThreadB = threading.Thread(target = self.DoThat, args = ())
          InterestingThreadB.start()
  </code></pre>
  
  <p>I'm facing same situation as above. I really want to know if it's thread-safe for <code>self.Counter</code>, well if not, what options do I have? I can only think of <code>threading.RLock()</code> to lock this resource, any better idea?</p>