Являются ли переменные экземпляра Python потокобезопасными?

Хорошо, сначала проверьте следующие коды:

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()

Я столкнулся с той же ситуацией, что и выше. Я действительно хочу знать, является ли он потокобезопасным для self.Counter , а если нет, то какие у меня есть варианты? Я могу думать только о threading.RLock () , чтобы заблокировать этот ресурс, есть ли лучшая идея?

20
задан Basel Shishani 12 October 2013 в 09:29
поделиться